2011-07-08 7 views
6

Nie wiem dlaczego, ale zawsze napisane moich testów JMock tak:JMock assertIsSatisfied in TearDown?

@Test 
public void testMyThing() throws Exception { 
    mockery.checking(new Expectations() {{ 
     oneOf(mockObj).foo(); 
    }}); 
    testObj.bar(); // calls mockObj.foo() 
    mockery.assertIsSatisfied(); 
} 

Ale gdy istnieje wiele badań, lepiej jest przenieść assertIsSatisfied na rozdarcie w dół?

@After 
public void tearDown() throws Exception { 
    mockery.assertIsSatisfied(); 
} 

Odpowiedz

5

Zalecanym sposobem na to jest użycie JMock runner. Napisz adnotację do klasy, podając

@RunWith(JMock.class) 
public class TestClass { 

Spowoduje to wywołanie asercji we właściwym miejscu w cyklu życia testu. Teardown nie jest właściwym miejscem, ponieważ błąd może nie zostać poprawnie zgłoszony i może zepsuć inne czynności porządkowe.

Mamy również regułę kpiny w repozytorium, które działa z nową infrastrukturą @Rule.

0

Tak, mam tendencję do robienia tego w oderwaniu. Utrzymuje ostrość poszczególnych metod testowania na tym, co faktycznie testują, usuwając płytę kuchenną z @After - dla mnie kluczowe jest to, że testy są tak wyraziste i czytelne, jak to tylko możliwe.

W rzeczywistości, czasami brać go dalej niż to, i użyć klasy JMockSupport bazowy, który obsługuje Mockery dla mnie (jak również zapewnienie implementacje wygodę w mock(...)). Jest to po prostu wygoda i pod żadnym pozorem taki wymóg nie był w JUnit 3.

+0

Należy rozważyć użycie runner lub nowej implementacji reguły. Jeśli użyjesz funkcji @After, wyjątek nie zostanie zgłoszony w odpowiednim czasie w cyklu życia testu. –