2012-01-27 17 views
47

Czy można powiedzieć w kodzie, czy dany obiekt jest makietą Mockito czy nie?Jak mogę sprawdzić, czy obiekt jest makietą Mockito?

Powodem, dla którego chciałbym to zrobić, jest zwrócenie innego komunikatu o błędzie, gdy jest on fałszywy. Zostanie to wykorzystane do zasugerowania innym programistom, że powinni użyć przygotowanej wcześniej sztuczki, która jest już ustawiona, aby odbierać połączenia w użyteczny sposób, zamiast tworzyć samego siebie.

W tej chwili najlepsze mam object.getClass().getName().contains("EnhancerByMockitoWithCGLIB"), ale to czuje się hacky.

Odpowiedz

45

Wygląda na to, nie ma takiego API (proszę zwrócić uwagę na kwestię, powinno być!) Na szczęście (po Twoim komentarzu poniżej) istnieje metoda w pakiecie org.mockito.internal.util:

import org.mockito.internal.util.MockUtil; 

new MockUtil().isMock(obj) 

W przyszłości metoda Mockito.isMock() może zostać dodany do publicznego interfejsu API, patrz: Issue 313: Provide isMock outside of org.mockito.internal).

+3

Po otrzymaniu odpowiedzi przyjrzałem się [źródłu dla MockUtil] (https://fisheye2.atlassian.com/browse/mockito/trunk/src/org/mockito/internal/util/MockUtil.java? r = 2020) i bezpośrednio pod prywatną metodą 'isMockitoMock' istnieje publiczna metoda' isMock', która wydaje się być użyta. Będę publikować na liście mailingowej Mockito, aby sprawdzić, czy dobrym pomysłem jest samodzielne wywoływanie metod z 'org.mockito.internal.util'. – mikej

+0

Jedną z intencji pakietu 'org.mockito.internal.util' jest to, że zespół Mockito mógł zmienić coś w tym pakiecie, w nowszej wersji. Więc jeśli użyjesz tego pakietu, twoje testy mogłyby przerwać w przyszłości. Jednak jest bardzo mało prawdopodobne, abyśmy pozbyli się tej konkretnej metody, więc powiedziałbym, że jest ona dość bezpieczna w użyciu. –

+0

@mikej: +1, jakoś tęskniłem za tym, dzięki! Usunąłem starą odpowiedź i zamiast tego przedstawiłem Twoją sugestię, aby lepiej się wyróżniało. Mam nadzieję, że nie masz nic przeciwko. –

32

jako uzupełnienie, API publicznych Mockito ma teraz tą metodą:

MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect) 

co jest wynikiem emisji, które @David Wallace podniesiony. Zwrócony obiekt obsługuje metody "isMock()" oraz "isSpy()" i może być później rozszerzony, aby zapewnić więcej informacji związanych z próbą.

Powiązane problemy