2012-03-04 16 views
5

Próbuję uzyskać metodę verify w Mockito do pracy. Mam następujący test:Weryfikacja Mockito nie powodzi

@Test 
public void testShouldFail() 
{ 
    String string = mock(String.class); 
    string.length(); 
    verify(string, times(100)).length(); 
} 

Ten test powinien zakończyć się niepowodzeniem, ale mija. Czy ktoś wie dlaczego? Czy używam Mockito źle?

Aktualizacja

Oto kolejny przykład, który nie zawodzi:

private interface Bar 
{ 
    public void foo(); 
} 

@Test 
public void testShouldFail() 
{ 
    Bar bar = mock(Bar.class); 
    bar.foo(); 
    verify(bar, times(100)).foo(); 
} 
+0

Twoja druga przykładowa dawka kończy się niepowodzeniem podczas testowania, czy możesz podać więcej szczegółów? –

Odpowiedz

5

dobrze, powinieneś być ostrożny, że: domyślnie nie można kpić klas końcowych (jak String) . This is a known limitation z ram.

Twój przykład nie dla mnie z właściwym komunikatem o błędzie:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.lang.String 
Mockito cannot mock/spy following: 
    - final classes 
    - anonymous classes 
    - primitive types 
    at Test.testShouldFail(Test.java:6) 
     ... 

Więc myślę, że nie mogą być pewne drobne problemy konfiguracyjne w projekcie. Z którego IDE korzystasz? Którą wersję Mockito masz? Jak prowadzisz swoje testy?

Możesz spróbować użyć dodatkowego zestawu narzędzi, takiego jak PowerMock, który pomoże Ci overcome this limitation. Ramy te można dość łatwo zastosować w połączeniu z Mockito.

Z drugiej strony, String jest częścią pakietu java.lang, i zakładam, istnieją pewne dodatkowe kontrole bezpieczeństwa związane z tych klas przez VM (choć nie jest pewny). Nie jestem przekonany, że można kpić (to jest manipulować bajtodiem) takiej klasy (na przykład, dostajesz błąd kompilacji, jeśli próbujesz umieścić coś w pakiecie java.*). Ale to tylko założenie z mojej strony.

+0

Szczerze mówiąc, użyłem właśnie "String" jako szybki przykład. Mimo to dobrze jest wiedzieć, że Mockito ma to ograniczenie. Zaktualizowałem moje pytanie innym przykładem, który nie zawodzi. Używam Eclipse Indigo z Junit 4.8.2, Mockito 1.9.0 i PowerMock 1.4.11. – LandonSchropp

+0

Czy mógłbyś dołączyć pełną wersję testową, łącznie z dyrektywami dotyczącymi importu? Czy na pewno dodałeś wymagane pliki JAR do swojego projektu? – rlegendi

+0

Przepraszamy za spóźnioną odpowiedź. Wygląda na to, że miałeś rację. Popsułem moją bibliotekę Mockito, kiedy dodałem PowerMocka. Zaktualizuj odpowiedź, aby ją sprawdzić. Dzięki za pomoc. – LandonSchropp