package junitparams;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestName;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.rules.Timeout;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.RunWith;
import static org.assertj.core.api.Assertions.*;
@RunWith(JUnitParamsRunner.class)
public class RulesTest {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Rule
public ExpectedException exception = ExpectedException.none();
@Rule
public ErrorCollector errors = new ErrorCollector();
@Rule
public TestName testName = new TestName();
@Rule
public TestWatcher testWatcher = new TestWatcher() {
};
@Rule
public Timeout timeout = new Timeout(0);
@Test
@Parameters("")
public void shouldHandleRulesProperly(String n) {
assertThat(testName.getMethodName()).isEqualTo("shouldHandleRulesProperly");
}
@Test
public void shouldProvideHelpfulExceptionMessageWhenRuleIsUsedImproperly() {
Result result = JUnitCore.runClasses(ProtectedRuleTest.class);
assertThat(result.getFailureCount()).isEqualTo(1);
assertThat(result.getFailures().get(0).getException())
.hasMessage("The @Rule 'testRule' must be public.");
}
// TODO(JUnit4.10) - must be static in JUnit 4.10
public static class ProtectedRuleTest {
@Rule
TestRule testRule;
@Test
public void test() {
}
}
}