Mockito
Deweloperzy | Szczepan Faber, Brice Dutheil, Rafael Winterhalter, Tim van der Lippe i inni. |
---|---|
Wersja stabilna | 4.5.1 / 21 kwietnia 2022 r.
|
Magazyn | |
Napisane w | Jawa |
Typ | Testowanie |
Licencja | Licencja MIT |
Strona internetowa |
Mockito to platforma testowa typu open source dla języka Java wydana na licencji MIT . Framework pozwala na tworzenie podwójnych obiektów testowych ( mock object ) w zautomatyzowanych testach jednostkowych na potrzeby programowania sterowanego testami (TDD) lub programowania opartego na zachowaniu (BDD).
Nazwa i logo frameworka to gra z mojito , rodzajem napoju.
Cechy
Mockito pozwala programistom zweryfikować zachowanie testowanego systemu (SUT) bez wcześniejszego ustalania oczekiwań. Jedną z krytyki obiektów symulowanych jest ścisłe powiązanie kodu testowego z testowanym systemem. Mockito próbuje wyeliminować wzorzec oczekiwania-wykonania-weryfikacji poprzez usunięcie specyfikacji oczekiwań. Mockito zapewnia również pewne adnotacje do redukowania kodu standardowego .
Pochodzenie
Mockito rozpoczął od rozszerzenia składni i funkcjonalności EasyMock .
Przykład
Rozważ ten odłączony program Hello world ; możemy przetestować niektóre jego części, używając symulowanych obiektów do innych części.
pakiet org.przyklady ; importuj wyjątek java.io.IO ; klasa publiczna HelloApplication { publiczny interfejs statyczny Greeter { String getGreeting ( String temat ); String getIntroduction ( String aktor ); } public static class HelloGreeter implementuje Greeter { private String hello
; prywatny segmentator ciągów znaków ; public HelloGreeter ( String hello , String segmenter ) { to . cześć = cześć ; to . segmentator = segmentator ; } public String getGreeting ( String temat ) { return witaj + " " + temat
; } public String getIntroduction ( String aktor ) { return aktor + segmenter ; } } publiczny interfejs statyczny HelloActable { void sayHello ( aktor String , podmiot String ) zgłasza wyjątek IOException ; } implementuje publiczną klasę statyczną HelloAction
HelloActable { private Witaj witaj witaj witaj ; prywatny Dołączalny helloWriter ; public HelloAction ( Greeter helloGreeter , Appendable helloWriter ) { super (); to . witaj witaj witaj = witaj witaj ; to . cześćPisarz = cześćPisarz ; } public void powiedz cześć (
Aktor String , podmiot String ) zgłasza wyjątek IOException { helloWriter . dołącz ( helloGreeter . getIntroduction ( aktor )). append ( helloGreeter . getGreeting ( temat )); } } public static void main ( String ... args ) zgłasza wyjątek IOException {
new HelloAction ( new HelloGreeter ( "witaj" , ": " ), System . out ). powiedz Witaj ( "aplikacja" , "świat" ); } }
Wynik uruchomienia HelloApplication będzie następujący:
aplikacja: witaj świecie
Test jednostkowy komponentu HelloActable może wyglądać następująco:
pakiet org.przyklady ; import statyczny org.mockito.Matchers.any ; import statyczny org.mockito.Matchers.eq ; import statyczny org.mockito.Mockito.mock ; import statyczny org.mockito.Mockito.times ; import statyczny org.mockito.Mockito.verify ; import statyczny org.mockito.Mockito.when ; import org.junit.Before ; import org.junit.Test ; import org.examples.HelloApplication.HelloActable
; import org.examples.HelloApplication.HelloAction ; import org.examples.HelloApplication.Greeter ; klasa publiczna HelloActionUnitTest { Pozdrów helloGreeterMock ; Możliwość dołączania helloWriterMock ; HelloActable helloAction ; @Before public void setUp () { helloGreeterMock = mock ( Greeter . class ); cześćWriterMock
= mock ( dołączalna . klasa ); helloAction = new HelloAction ( helloGreeterMock , helloWriterMock ); } @Test public void testSayHello () zgłasza wyjątek { when ( helloWriterMock . append ( any ( String . class ))). następnie Powrót ( helloWriterMock );
kiedy ( helloGreeterMock . getIntroduction ( eq ( "unitTest" ))). następniePowrót ( "test jednostki:" ); when ( helloGreeterMock . getGreeting ( eq ( "world" ))). następniePowrót ( "cześć świecie" ); cześćAkcja . powiedz Witaj ( "test jednostki" , "świat" );
zweryfikować ( helloGreeterMock ). getIntroduction ( eq ( "test jednostki" )); zweryfikować ( helloGreeterMock ). getGreeting ( eq ( "świat" )); zweryfikować ( helloWriterMock , razy ( 2 )). dołącz ( dowolny ( String . klasa )); zweryfikować ( helloWriterMock ,
razy ( 1 )). dołącz ( eq ( "Test jednostki: " )); zweryfikuj ( helloWriterMock , razy ( 1 )). append ( eq ( "czesc swiecie" )); } }
Używa symulowanych obiektów dla interfejsów Greeter i Appendable i domyślnie zakłada następny przypadek użycia:
unitTest: cześć, świecie
Kod testu integracyjnego do testowania HelloActable połączonego z Greeterem może wyglądać następująco:
pakiet org.przyklady ; import statyczny org.mockito.Matchers.any ; import statyczny org.mockito.Matchers.eq ; import statyczny org.mockito.Mockito.mock ; import statyczny org.mockito.Mockito.times ; import statyczny org.mockito.Mockito.verify ; import statyczny org.mockito.Mockito.when ; import org.junit.Before ; import org.junit.Test ; import org.examples.HelloApplication.HelloActable
; import org.examples.HelloApplication.HelloAction ; import org.examples.HelloApplication.Greeter ; import org.examples.HelloApplication.HelloGreeter ; klasa publiczna HelloActionIntegrationTest { HelloActable helloAction ; witaj witaj witaj witaj ; Możliwość dołączania helloWriterMock ; @Before public void setUp () { helloGreeter = nowy HelloGreeter
( „witaj” , „mówi” ); helloWriterMock = mock ( Dołączalna klasa ) ; helloAction = new HelloAction ( helloGreeter , helloWriterMock ); } @Test public void testSayHello () zgłasza wyjątek { when ( helloWriterMock . append ( any (
ciąg . klasa ))). następnie Powrót ( helloWriterMock ); cześćAkcja . powiedz Witaj ( "test integracji" , "wszechświat" ); zweryfikować ( helloWriterMock , razy ( 2 )). dołącz ( dowolny ( String . klasa )); zweryfikuj ( helloWriterMock , razy ( 1 )).
append ( eq ( "Test integracji mówi " )); zweryfikuj ( helloWriterMock , razy ( 1 )). append ( eq ( "witamy wszechświat" )); } }
Używa symulowanych obiektów tylko zamiast interfejsów Appendable, używa rzeczywistych implementacji dla innych interfejsów (HelloActable i Greeter) i domyślnie zakłada następny przypadek użycia:
test integracji mówi, że witamy wszechświat
aby móc skompilować i uruchomić klasy testowe, konieczne jest umieszczenie słoików Mockito i słoików JUnit w ścieżce klasy .