Skip to content

Commit 982a750

Browse files
committed
Merge pull request junit-team#343 from marcphilipp/no-static-rules
Fixes junit-teamgh-339: @rule fields/methods must not be static
2 parents 849a16f + b4f0afa commit 982a750

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

src/main/java/org/junit/internal/runners/rules/RuleFieldValidator.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ public enum RuleFieldValidator {
4343

4444
private final Class<? extends Annotation> fAnnotation;
4545

46-
private final boolean fOnlyStaticMembers;
46+
private final boolean fStaticMembers;
4747
private final boolean fMethods;
4848

4949
private RuleFieldValidator(Class<? extends Annotation> annotation,
50-
boolean methods, boolean fOnlyStaticMembers) {
50+
boolean methods, boolean fStaticMembers) {
5151
this.fAnnotation= annotation;
52-
this.fOnlyStaticMembers= fOnlyStaticMembers;
52+
this.fStaticMembers= fStaticMembers;
5353
this.fMethods= methods;
5454
}
5555

@@ -68,15 +68,17 @@ public void validate(TestClass target, List<Throwable> errors) {
6868
}
6969

7070
private void validateMember(FrameworkMember<?> member, List<Throwable> errors) {
71-
optionallyValidateStatic(member, errors);
71+
validateStatic(member, errors);
7272
validatePublic(member, errors);
7373
validateTestRuleOrMethodRule(member, errors);
7474
}
7575

76-
private void optionallyValidateStatic(FrameworkMember<?> member,
76+
private void validateStatic(FrameworkMember<?> member,
7777
List<Throwable> errors) {
78-
if (fOnlyStaticMembers && !member.isStatic())
78+
if (fStaticMembers && !member.isStatic())
7979
addError(errors, member, "must be static.");
80+
if (!fStaticMembers && member.isStatic())
81+
addError(errors, member, "must not be static.");
8082
}
8183

8284
private void validatePublic(FrameworkMember<?> member, List<Throwable> errors) {

src/test/java/org/junit/tests/experimental/rules/RuleFieldValidatorTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@ public static class TestWithNonStaticTestRule {
5959
public TestRule temporaryFolder = new TemporaryFolder();
6060
}
6161

62+
@Test
63+
public void rejectStaticTestRule() {
64+
TestClass target= new TestClass(TestWithStaticTestRule.class);
65+
RULE_VALIDATOR.validate(target, errors);
66+
assertOneErrorWithMessage("The @Rule 'temporaryFolder' must not be static.");
67+
}
68+
69+
public static class TestWithStaticTestRule {
70+
@Rule
71+
public static TestRule temporaryFolder = new TemporaryFolder();
72+
}
73+
6274
@Test
6375
public void acceptMethodRule() throws Exception {
6476
TestClass target= new TestClass(TestWithMethodRule.class);
@@ -125,6 +137,18 @@ public static class TestMethodWithNonStaticTestRule {
125137
public TestRule getTemporaryFolder() { return new TemporaryFolder(); }
126138
}
127139

140+
@Test
141+
public void rejectMethodStaticTestRule() {
142+
TestClass target= new TestClass(TestMethodWithStaticTestRule.class);
143+
RULE_METHOD_VALIDATOR.validate(target, errors);
144+
assertOneErrorWithMessage("The @Rule 'getTemporaryFolder' must not be static.");
145+
}
146+
147+
public static class TestMethodWithStaticTestRule {
148+
@Rule
149+
public static TestRule getTemporaryFolder() { return new TemporaryFolder(); }
150+
}
151+
128152
@Test
129153
public void methodAcceptMethodRuleMethod() throws Exception {
130154
TestClass target= new TestClass(MethodTestWithMethodRule.class);

0 commit comments

Comments
 (0)