2015-05-14 15 views
9

Jestem zdezorientowany co do celu i różnicy między oczekiwaniami a weryfikacjami. Na przykład.Czy oczekiwania są niepotrzebne, jeśli w moim teście są weryfikacje?

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    new Expectations() {{ 
     fooDao.delete(withEqual(1L)); times = 1; 
    }}; 

    fooService.delete(1L); 

    new Verifications() {{ 
     Long id; 
     fooDao.delete(id = withCapture()); times = 1; 
     Assert.assertEquals(1L, id); 
    }}; 
} 

Przede wszystkim proszę dać mi znać, jeśli ten test jest źle napisany/przemyślany.

Po drugie, moje pytanie: sekcja oczekiwań wydaje mi się zbędna i nie mogę wymyślić przykładu, w którym nie byłoby.

+0

Zmieniłem tytuł, aby lepiej odzwierciedlić swoje pytanie na dole strony. Jeśli źle zrozumiałem to pytanie, możesz cofnąć moją zmianę. – Thunderforge

+0

Stary wątek, wiem, ale moje zrozumienie jest luźno i zwięźle: blok "oczekiwań" zajmuje się rzeczami, które mogą się wydarzyć; blok "Weryfikacja" zajmuje się rzeczami, które musiały się wydarzyć. –

Odpowiedz

12

Celem Expectations jest umożliwienie przeprowadzenia testu na oczekiwanych wyników dla dla wyszydzanych metod i/lub konstruktorów, zgodnie z potrzebą testowanego kodu.

Celem testu Verifications jest umożliwienie przeprowadzenia testu na weryfikując oczekiwane wywołania na wyśmiewane metody i/lub konstruktory, zgodnie z testowanym kodem.

Więc normalnie, test nie zarówno rekord i zweryfikować samo oczekiwanie (gdzie „oczekiwanie” określa zestaw inwokacji do szydzili metod/konstruktorów, które będą występować, gdy kod badany jest sprawowana).

Mając to na uwadze, test Przykładem może wyglądać następująco:

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    fooService.delete(1L); 

    new Verifications() {{ fooDao.delete(1L); }}; 
} 
+0

Nadal nie rozumiem tego. W twoim przykładzie możesz osiągnąć to samo z blokiem oczekiwań, prawda? Kiedy potrzebujesz bloku weryfikacji? – T3rm1

+1

"Potrzebujesz" bloku weryfikacyjnego, jeśli chcesz pisać testy zgodnie z ["Arrange Act Asssert"] (http://c2.com/cgi/wiki?ArrangeActAssert) lub ["Given When Then"] (http: //martinfowler.com/bliki/GivenWhenThen.html) styl. –

+0

@ Rogério Rozumiem tę odpowiedź, ale dlaczego można ustawić weryfikację w bloku oczekiwania? np .: 'times',' minTimes' itd. Jaki scenariusz chciałbyś użyć tych weryfikacji w bloku oczekiwań? – PDStat

Powiązane problemy