В JUnit 4.10 BlockJUnit4ClassRunner (суперкласс SpringJUnit4ClassRunner), по-видимому, заботится о создании цепочек Statement таким образом, чтобы правила выполнялись перед любыми методами @Before. От JUnit 4.10:
protected Statement methodBlock(FrameworkMethod method) {
// ...
Statement statement= methodInvoker(method, test);
statement= possiblyExpectingExceptions(method, test, statement);
statement= withPotentialTimeout(method, test, statement);
statement= withBefores(method, test, statement);
statement= withAfters(method, test, statement);
statement= withRules(method, test, statement);
return statement;
}
JUnit 4.7, по-видимому, объединяет цепочки операторов в другом порядке:
Statement statement= methodInvoker(method, test);
statement= possiblyExpectingExceptions(method, test, statement);
statement= withPotentialTimeout(method, test, statement);
statement= withRules(method, test, statement);
statement= withBefores(method, test, statement);
statement= withAfters(method, test, statement);
return statement;
Родительское POM spring-test-3.0.5, похоже, указывает на то, что оно зависит от JUnit 4.7. Интересно, поможет ли использовать его более новый JUnit?