Czy Spring @DirtiesContext ładuje kontekst Springa?
Mam klasę testową, która wygląda
@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
}
}
i wtest-context.xml
DefiniujęJUnitRuleMockery
plus kilka próbnych obiektów przez afactory-method
, lubić
<bean id="mockContextFactory" class="MockContextFactory" />
<bean id="jMockContext" factory-bean="mockContextFactory" factory-method="getContext" scope="prototype" />
<bean id="firstMock" factory-bean="mockContextFactory" factory-method="getFirstMock" />
<bean id="secondMock" factory-bean="mockContextFactory" factory-method="getSecondMock" />
MockContextFactory
jest
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
}
WTestClass
Mam kilka metod testowych i ze względu na adnotacje@DirtiesContext
, Spodziewam się, że kontekst Springa zostanie ponownie załadowany po każdym wykonaniu testu (ponieważ każdy test wyznacza oczekiwania na pozorowane obiekty, za każdym razem muszę ładować kontekst Springa). Widzieć@DirtiesContext stąd. Wydaje się jednak, że kontekst Springa nie jest przeładowywany: w rzeczywistości wchodzenie w tryb debugowania na początkutest2
(podobnotest1
został wykonany wcześniej) WidzęjMockContext
wciąż trzymam oczekiwania, listę egzekucji i błędy (jeśli występują)test1
.
Tak więc, aby skończyć z kilkoma pytaniami, tak@DirtiesContext
Naprawdę powoduję ponowne załadowanie kontekstu Springa (tak jak zrozumiałem z Spring Docs), czy też źle zrozumiałem adnotację? W pierwszym przypadku, co robię źle? W tym drugim przypadku, jak mogę zmusić kontekst Spring do ponownego załadowania dla każdego testu?
EDYTOWAĆ, aby określić problem: miałem kod podobny do powyższego przykładu, działający od kilku dni, a dzisiaj stworzyłem nowy test, w którym dodałem oczekiwanie, które się nie powiodło. Potem widziałem wszystkie inne testy w klasie z tego samego powodu (podczas gdy onigreen
Do dzisiaj). Debugowanie, dowiedziałem się o tymjMockContext
nigdy nie zostało wyczyszczone, co oznacza, że wszystkie testy dodawały oczekiwania do tej samej puli: oczywiście, dopóki nie oczekiwał nieudanego oczekiwania, co było przejrzyste i nie zauważyłem tego (test1
dodaje i mija kilka oczekiwań,test2
przyjmuje nieopuszczoną pulę Oczekiwania JUŻ i dodaje swoją własną, więc nie było problemu), ale nie podoba mi się poprzednia sytuacja i chciałbym rozpocząć każdy test bez wcześniejszych oczekiwań.