Verifica delle dipendenze fittizie: best practice

1

Ho una semplice domanda sulle migliori pratiche nelle verifiche dei test unitari. Dato questo esempio:


@Test
public void methodUnderTest() {

    when(mockedDependency.someMethod()).thenReturn(someValue);

    int actual = classUnderTest.methodUnderTest();

    assertEquals(5, actual);
    verify(mockedDependency).someMethod();//should I do this?

}

Come puoi vedere, sto verificando che il mio simulato venga usato. Dovrei farlo?

Con questa verifica se cambio l'implementazione del metodo (rimuovendo l'utilizzo di tale dipendenza) il mio test fallirà e sono costretto a rimuovere when e verify .

Senza questa verifica se cambio l'implementazione del metodo il mio test passerà, ma non saprò mai che in quel test sto prendendo in giro qualcosa che non è necessario e quando vedrò di nuovo quel test penserò che in la mia implementazione mi serve questa dipendenza.

Grazie in anticipo.

    
posta Bronx 14.12.2017 - 00:20
fonte

1 risposta

1

Mi sono fatto questa domanda molte volte. Penso che devi differenziare (traduzione: "dipende") tra almeno due casi:

Caso I

Il modulo sotto test utilizza la dipendenza per ottenere alcuni valori o per eseguire alcune attività di supporto. Ad esempio, GenerateIncomeSheet() potrebbe avere dipendenze su AccountsRepository e a TaxCalculator .

In questo caso, non verificare che vengano chiamati i metodi delle dipendenze. Il punto del tuo modulo non è quello di utilizzare queste dipendenze, ma di fornire il risultato corretto.

Case II

Alcune importanti operazioni, solitamente di cambio di stato, devono essere eseguite da una dipendenza. Ad esempio, il metodo in prova dovrebbe eseguire alcuni controlli e, a seconda del risultato, aggiungere dati a un repository.

In questo caso, non solo vuoi verificare che il metodo del repository sia stato chiamato (con i dati corretti), ma anche che sia stato non stato chiamato se i controlli falliscono.

    
risposta data 15.12.2017 - 19:10
fonte

Leggi altre domande sui tag