Note preliminari
Non entrerò nella distinzione dei diversi tipi di test che ci sono, ci sono già alcune domande su questi siti al riguardo.
Prenderò quello che c'è e che dice: test unitari nel senso di "testare la più piccola unità isolabile di un'applicazione" da cui deriva effettivamente questa domanda
Il problema dell'isolamento
Qual è la più piccola unità isolabile di un programma. Bene, per come la vedo io (altamente?) Dipende dalla lingua in cui stai codificando.
Micheal Feathers parla del concetto di cucitura : [WEwLC, p31]
Una cucitura è un luogo in cui è possibile modificare il comportamento nel programma senza modificarlo in quel punto.
E senza entrare nei dettagli, capisco una cucitura - nel contesto del test unitario - per essere un posto in un programma in cui il tuo "test" può interfacciarsi con la tua "unità".
Esempi
Il test unitario - specialmente in C ++ - richiede dal codice in prova di aggiungere più cuciture che sarebbero strettamente richieste per un dato problema.
Esempio:
- Aggiunta di un'interfaccia virtuale in cui l'implementazione non virtuale sarebbe stata sufficiente
- Suddivisione - generalizzazione (?) - di una classe (piccola) "solo" per facilitare l'aggiunta di un test.
- Dividere un progetto eseguibile in libs apparentemente "indipendenti", "solo" per facilitare la loro compilazione indipendente per i test.
La domanda
Proverò alcune versioni che speriamo chiedano lo stesso punto:
- Il modo in cui i Test di unità richiedono di strutturare il codice di un'applicazione "solo" è utile per i test di unità o è effettivamente vantaggioso per la struttura delle applicazioni.
- È il codice generalizzazione che è necessario per rendere più unità controllabile utile per qualsiasi cosa , ma i test di unità?
- L'aggiunta di unit test obbliga a generalizzare inutilmente?
- La forza dei test delle unità di forma sul codice "sempre" è anche una buona forma per il codice in generale visto dal dominio problematico?
Ricordo una regola empirica che diceva non generalizzare fino a quando non è necessario / fino a quando non c'è un secondo posto che utilizza il codice. Con Unit Test, c'è sempre un secondo posto che utilizza il codice, vale a dire il test unitario. Quindi questo motivo è sufficiente per generalizzare?