2009-12-29 18 views

Odpowiedz

11

Domyślnie EasyMock rzuci wyjątek dla wszelkich metod, które są wywoływane, które nie zostały wyraźnie określone oczekiwania na.

14

Z EasyMock documentation:

Nicea Mocks

Na atrapa obiektu zwróconego przez mock() domyślne zachowanie dla wszystkich metod jest rzucić AssertionError dla wszystkich nieoczekiwanych wywołań metod. Jeśli chcesz "miły" Mock Object, który domyślnie zezwala na wszystkie wywołania metod i zwraca odpowiednie puste wartości (0, null lub false), użyj zamiast tego niceMock().

To, o co pytasz, jest domyślnym zachowaniem.

+0

znajdę domyślne zachowanie irytujące, jak bardzo łatwo skończyć „wymagający” w teście, że kod badanego nieefektywne. Kiedyś zrobiłem prosty Refactor poruszania się getSomething() połączenia na zewnątrz pętli, który spowodował niepowodzenie testu, bo nie zadzwonił getSomething 40 razy (!), I „non-nice” mocks zachęcać do tego rodzaju testu (ponieważ zawiedzie, gdy spodziewam się tylko jednego połączenia przed refaktoryzacją). –

+1

@Stein: agreed. Testy jednostkowe powinny być drobnoziarniste, najlepiej testując tylko jedną rzecz. "nie ładne" kpiny zniechęcają to. –

+1

Z mojego czytania tego pytania wynika, że ​​PO chce fałszywej weryfikacji, która zostanie odrzucona, jeśli zostanie wywołana. Fajne drwiny nie są tym, co chce OP, ponieważ gdy podczas egzaminu sprawdzana jest fajna sztuczka, nadal przechodzi weryfikację. –

14

Wiem, że to pytanie jest bardzo stary, ale miałem to samo pytanie jak PO i zrobił kilka rozglądać. Znalazłem następujące rozwiązanie:

Po dodaniu .andThrow(new AssertionFailedError()).anyTimes(); na końcu deklaracji EasyMock, test zakończy się niepowodzeniem po wywołaniu wyśmiewanej metody.

Przyczyną jest to, że lepiej nie używać NiceMock i pozwolić, aby test zakończył się niepowodzeniem z powodu niezmodyfikowanego wywołania metody, ponieważ pozwala to konkretnie przetestować, że metoda XYZ nie została wywołana w danym scenariuszu.

Chciałbym dać David Wallace kredyt dla tej odpowiedzi. Znalazłem rozwiązanie w swojej odpowiedzi na następujące stanowisko: Test that void method didn't get called with EasyMock

+2

Uważam, że to powinna być zaakceptowana odpowiedź. Powód jest taki, że testy jednostkowe często zmieniają się wraz z nowymi wymaganiami i bardzo łatwo jest przegapić, dlaczego nie ustalono fałszywych oczekiwań. To rozwiązanie powoduje, że brakujące wywołanie metody jest jawne, a więc wymaga większej uwagi ze strony osoby zmieniającej kod. – mindreader

Powiązane problemy