Mockito

Mockito
Deweloperzy Szczepan Faber, Brice Dutheil, Rafael Winterhalter, Tim van der Lippe i inni.
Wersja stabilna
4.5.1 / 21 kwietnia 2022 r. ; 10 miesięcy temu ( 21.04.2022 )
Magazyn github .com /mockito /mockito
Napisane w Jawa
Typ Testowanie
Licencja Licencja MIT
Strona internetowa witryna .mockito .org

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 .

Zobacz też

Linki zewnętrzne