Un test unitario utilizza il codice di installazione e un test di integrazione?

4

I libri di programmazione di solito predicano per testare un solo metodo in un test unitario. Questo dovrebbe mantenere i test indipendenti l'uno dall'altro e ridurre la quantità di lavoro necessaria per riscrivere i test se una particolare parte del sistema cambia.

Ma per quanto riguarda le chiamate per impostare l'oggetto in prova?

@Test
public void testMethod_someState_someExpectation() {
    MyObject obj = new MyObject();
    obj.setSomeStuff();
    obj.doSomeStuffToGetIntoTheSpecifiedState();
    Test.assertEqual(obj.testMethod(), someValue);
}

La maggior parte dei miei test unitari assomiglia a questo, perché il mio oggetto in prova potrebbe trovarsi in molti stati diversi quando chiami il mio testMethod () e vorrei testarlo come si comporta. E credo che la maggior parte del codice orientato agli oggetti non sia costituito da pure funzioni.

Questi tipi di test sono considerati automaticamente test di integrazione, o questo tipo di installazione è normale per il test dell'unità?

    
posta Luca Fülbier 04.07.2016 - 22:41
fonte

2 risposte

9

In primo luogo, non esiste una definizione rigida e ampiamente accettata di quando un test non è più un test unitario - i confini sono sfocati e in qualche misura opinabili.

Tuttavia, la mia comprensione della parola "test di integrazione" implica che ci devono essere almeno due "unità" o "componenti" di codice e alcuni codice di produzione che li integra. Un test di integrazione è quindi un pezzo di codice che controlla lo scenario integrato del codice di produzione, non una "configurazione integrativa" nel codice di test.

    
risposta data 04.07.2016 - 23:05
fonte
4

Non esiste una definizione chiara di cosa sia un "test unitario". La definizione che ritengo più utile è che se un'unità isolata di codice (che potrebbe essere un metodo, una classe o molto altro) può essere testata senza effetti collaterali esterni, quindi è un test unitario. Essendo il "test del nove", posso eseguire molti di questi test in parallelo, senza che si influenzino a vicenda? Se è così, sono unit test.

Se il codice in prova ha effetti collaterali (ad esempio, legge / scrive su file, tabelle DB o - e questo si spera non si verifica mai per te - stato globale), allora devono essere eseguiti uno alla volta e così sono test di integrazione.

    
risposta data 05.07.2016 - 09:17
fonte

Leggi altre domande sui tag