2014-06-24 16 views
5

Eksperymentuję z konwersją niektórych testów jednostkowych z używania JMocka do używania Mockito i trafiłem w kilka przeszkód.Mockito vs JMock

pierwsze w moich testów przy użyciu JMock weryfikację i powrocie z króćca zdarzyć w jednym kroku następująco

contextMockery.checking(new Expectations() {{ 
     oneOf(dateUtilityService).isBeforeToday(URGENT_DATE); 
      will(returnValue(true)); 
    }}); 

ten zasadniczo sprawdza, że ​​metoda jest wywoływana i zwraca puszkach wartości w tym samym czasie. Test kończy się niepowodzeniem, jeśli NIE zostanie wywołana metoda isBeforeToday i zwróci wartość true dla mojej wartości w tym samym czasie. Natomiast podczas korzystania Mockito muszę sprawdzić, czy metoda jest wywoływana, a następnie powrót mojego puszkach wartość w oddzielnych etapach, które mają dość dużo duplikat następująco:

doReturn(true).when(dateUtilityService).isBeforeToday(URGENT_DATE); 
    verify(dateUtilityService).isBeforeToday(URGENT_DATE); 

Czy nie ma sposobu, aby to zrobić w jednym kroku?

Po drugie, jeśli zapomnę wpisać wywołanie metody do jednej z moich prób w moich oczekiwaniach, JMock nie przejdzie testu z "Niespodziewanym wyjątkiem wywołania", co moim zdaniem jest poprawne, podczas gdy Mockito z radością przejdzie test, chyba że jednoznacznie zweryfikuję że wezwanie metody do makiety nigdy nie może się wydarzyć, czy to jest poprawne (wydaje się błędne)? Czy istnieje sposób, aby powiedzieć mockito, aby nie zdać testu, jeśli nieoczekiwane wywołania metod zostały wykonane na podstawie moich wyśmianych zależności?

+0

Tak z ciekawości, czy też rozważyć przekształcenie testów JMockit? Składnia jest znacznie bliższa jMockowi: 'new Expectations() {{dateUtilityService.isBeforeToday (URGENT_DATE); result = true; }};;.. –

Odpowiedz

5

1.

Kiedy skrótową metoda nazywają zweryfikować metody zwykle nie jest to konieczne - należy sprawdzić działanie w oparciu o wartości zwracanej (w Twoim przypadku może zdarzyć się coś lub coś zostanie zwrócone, gdy powraca dateUtilityService prawda - sprawdzić, zamiast sprawdzenia interakcji z mock

dokumentacja

Mockito mówi również o tym http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#2

2.

to rzeczywiście prowadzi.. delikatne testy i nie jest zalecanym sposobem robienia rzeczy za pomocą mockito. Dlatego nie ma sposobu, aby ustawić to zachowanie.

Zobacz http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#8

+0

To ma sens w niektórych przypadkach (takich jak ten, który pokazałem), gdy kod pośredniczący zmienia wartość w typie zwracanym. Ale jak wspomniałem w drugiej części mojego pytania, jeśli zapomnę o wywołaniu metody (która może nie zmienić żadnej wartości zwracanej) w moim teście, chciałbym o tym wiedzieć, abym mógł dokonać świadomego wyboru albo zadzwonić lub powiedzieć testowi, że nigdy nie powinien być wywołany. –

+1

@ ClintonBosch Możesz dodać połączenie do 'verifyNoMoreInteractions()' na końcu metody testowania, aby wykryć nieodebrane połączenia. –

+0

Odkąd zacząłem używać Mockito (używałem JMock'a od 2007 lub nawet wcześniej ... nie pamiętam), zauważyłem zielone testy, w których koledzy zapomnieli zadzwonić do współpracownika, usłyszałem zdania typu "testy jednostkowe dawały czasem fałszywe pozytywne" , lepiej jest mieć testy integracyjne ". Być może lepiej jest użyć narzędzia takiego jak JMock i spróbować uniknąć "delikatnych testów" w inny sposób, zamiast używać tak słabych narzędzi do projektowania, jak Mockito. – sixro