2015-05-14 14 views
9

Sono confuso sullo scopo e sulla differenza tra aspettative e verifiche. Per esempio.Le aspettative sono ridondanti se ho delle verifiche nel mio test?

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    new Expectations() {{ 
     fooDao.delete(withEqual(1L)); times = 1; 
    }}; 

    fooService.delete(1L); 

    new Verifications() {{ 
     Long id; 
     fooDao.delete(id = withCapture()); times = 1; 
     Assert.assertEquals(1L, id); 
    }}; 
} 

Prima di tutto, fatemi sapere se questo test è scritto male/pensato.

In secondo luogo, la mia domanda: la sezione delle aspettative mi sembra ridondante e non riesco a trovare un esempio in cui non lo sarebbe.

+0

ho cambiato il titolo per riflettere meglio la tua domanda in fondo alla pagina. Se ho frainteso la domanda, sentiti libero di ripristinare il mio cambiamento. – Thunderforge

+0

Vecchio thread, lo so, ma la mia comprensione è, in modo approssimativo e teso: un blocco 'Expectations' gestisce le cose che possono accadere; un blocco 'Verifiche' gestisce le cose che devono essere successe. –

risposta

12

Lo scopo di Expectations è di consentire un test a di registrare i risultati previsti per i metodi e/o i costruttori mocked, in base alle esigenze del codice in prova.

Lo scopo Verifications è quello di consentire un test per verificare invocazioni attesi metodi deriso e/o costruttori, resa dal codice in esame.

Quindi, di norma, un test non sarebbe sia registrare e verificarne la stessa aspettativa (dove un "aspettativa" specifica un insieme di invocazioni a metodi deriso/costruttori che si prevede a verificarsi quando si esercita il codice sotto test).

Con questo in mente, il test esempio sarebbe simile a questa:

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    fooService.delete(1L); 

    new Verifications() {{ fooDao.delete(1L); }}; 
} 
+0

Ancora non lo capisco. Nel tuo esempio potresti ottenere lo stesso risultato con un blocco Expectations, giusto? Quando hai bisogno di un blocco di verifica? – T3rm1

+1

Hai "bisogno" di un blocco di verifica quando vuoi scrivere dei test secondo ["Arrange Act Assert"] (http://c2.com/cgi/wiki?ArrangeActAssert) o ["Given When Then"] (http: //martinfowler.com/bliki/GivenWhenThen.html) stile. –

+0

@ Rogério Capisco questa risposta, ma perché allora puoi impostare una verifica in un blocco di aspettative? ad esempio: 'times',' minTimes' ecc. Quale scenario si vorrebbe utilizzare queste verifiche in un blocco delle aspettative? – PDStat