2013-02-04 19 views
8

Ben benzeyen bir FizzConfigurator sınıf için bir birim test yazıyorum bir casus yöntemini alaycı 't aslında ateş ve veritabanı vurmak), ama bu doBuzz(String) arayarak doWidget yürütme biter bu beni için doğrulamak sağlar. Mockito iş için doğru araç gibi görünüyor. Bu Mockito

public class FizzConfiguratorTest { 
    @Test 
    public void callingDoBuzzAlsoCallsDoWidget() { 
     FizzConfigurator fixture = Mockito.spy(new FizzConfigurator()); 
     Mockito.when(fixture.doWidget(Mockito.anyString(), Config.ALWAYS)). 
      thenThrow(new RuntimeException()); 

     try { 
      fixture.doBuzz("This should throw."); 

      // We should never get here. Calling doBuzz should invoke our 
      // stubbed doWidget, which throws an exception. 
      Assert.fail(); 
     } catch(RuntimeException rte) { 
      return; // Test passed. 
     } 
    } 
} 

(bana en azından) iyi bir Oyun gibi görünüyor. Aslında o kadar kodlamak için gittiğinizde Ama (Mockito.when(...) hat test yöntemi içinde 2 satırda aşağıdaki derleyici hatası alıyorum:

tip mockito yöntemi (T) için geçerli değildir

.

  1. Ben doğru bu test kurulumu yaklaşan muyum Ya da daha iyi, Mockito- vardır: argümanlar (void) Ben mockito void döndüren bir yöntem ile alay edemez görüyoruz

yüzden sormak? önerilen, test yolu doBuzz başlık altında doWidget çağırır? Ve

  • Ben benim tüm FizzConfigurator sınıfının en kritik yöntemidir olarak doWidget stubbing/alay hakkında ne yapabilirim?
  • cevap

    19

    Bunu ancak doğrulamaları test etmek istisnalar kullanmak ister. Ve başka bir sorun, when()'u geçersiz dönen yöntemlerle kullanamazsınız. İşte

    bunu yapmak gibi olacaktır:

    FizzConfigurator fixture = Mockito.spy(new FizzConfigurator()); 
    doNothing().when(fixture).doWidget(Mockito.anyString(), Mockito.<Config>any())); 
    fixture.doBuzz("some string"); 
    Mockito.verify(fixture).doWidget("some string", Config.SOMETIMES); 
    
    +3

    bir başka problem() 'casuslara kullanılamaz zaman 'olmasıdır /mockito/Mockito.html#13) (gotcha not alın) ve [do * yöntemleri] (http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#12). – dj18

    +0

    Ve Bir çağrı yapmak olmadığını kontrol [ '' Mockito.reset''] (http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#17) kodunuzu sinsice etti - sahte etkileşimleri ve saplamayı unutur. – phineas

    0

    Bu doWidget yöntem FizzConfigurator bağlı olacağını başka bir sınıfa ait olmalıdır açık bir işaretidir. senin testte

    , bu yeni bağımlılık sahte olurdu ve onun yöntemi verify ile belirtilmiş kolayca doğrulamak başladı. [Ajanlarını kullanarak] ile mockito belgelerine bir göz (http://docs.mockito.googlecode.com/hg/latest/org almak -