Spring @DirtiesContext перезагружает Spring-контекст?
У меня есть тестовый класс, который выглядит как
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class TestClass {
@Rule @Resource public JUnitRuleMockery jMockContext;
public void test1() {
//Expectations and test
}
public void test2() {
//Expectations and test
}
}
И вtest-context.xml
Я определяюJUnitRuleMockery
плюс несколько фиктивных объектов черезfactory-method
, лайк
MockContextFactory
является
public class MockContextFactory
{
private JUnitRuleMockery jUnitRuleMockery;
public MockContextFactory() {
jUnitRuleMockery = new JUnitRuleMockery();
jUnitRuleMockery.setThreadingPolicy(new Synchroniser());
}
public JUnitRuleMockery getContext() {
return jUnitRuleMockery;
}
public FirstMock getFirstMock() {
return jUnitRuleMockery.mock(FirstMock.class);
}
//others getter
}
ВTestClass
У меня есть несколько методов испытаний и, из-за аннотаций@DirtiesContext
Я ожидаю перезагрузки контекста Spring после каждого выполнения теста (поскольку каждый тест устанавливает ожидания для фиктивных объектов, мне приходится каждый раз перезагружать контекст Spring). Увидеть@DirtiesContext отсюда, Однако, похоже, что контекст Spring не перезагружается: фактически, вход в режим отладки в началеtest2
(предположительноtest1
был выполнен ранее) я вижуjMockContext
все еще содержит ожидания, список выполнения и ошибки (если таковые имеются) от.test1
Итак, чтобы в конечном итоге с несколькими вопросами, делает@DirtiesContext
действительно ли перезагружается контекст Spring (как я понял из Spring Docs) или я неправильно понял аннотацию? В первом случае, что я делаю не так? В последнем случае, как я могу принудительно загрузить контекст Spring для каждого теста?
РЕДАКТИРОВАТЬ, чтобы разграничить проблему: у меня был код, подобный приведенному выше примеру, работающий от нескольких дней, а затем сегодня я создал новый тест, в котором я добавил ожидание, которое не удалось. Затем я увидел, что все остальные тесты в классе провалились по той же причине (пока ониgreen
до сегодняшнего дня). Отладка, я узнал, чтоjMockContext
никогда не очищался, что означает, что все тесты добавляли ожидания в один и тот же пул: конечно, до тех пор, пока ожидание не сработало, оно было прозрачным, и я этого не заметил (test1
добавляет и передает мало ожиданий,test2
берет непустой пул ожиданий, который УЖЕ пройден, и добавляет свои, чтобы не было проблем), но мне не нравится предыдущая ситуация, и я хотел бы начать каждый тест без каких-либо предыдущих ожиданий.