Stranamente la migliore risposta a questa domanda è il principio di responsabilità singola.
Ma funziona solo se ci pensate nel modo in cui Zio Bob lo spiega oggi. Se pensi che SRP sia semplicemente "Fai una cosa", questa risposta probabilmente non ha senso.
The final version of the SRP is:
A module should be responsible to one, and only one, actor
Robert C. Martin - Clean Architecture
Per attore si intende un gruppo di persone che svolgono un singolo ruolo che ha un certo interesse nel codice. Queste persone dovrebbero essere le uniche persone in grado di costringerti a cambiare questo codice. Se il tuo codice risponde a due gruppi di persone che svolgono due ruoli diversi, il tuo codice serve due master.
Che mi ricorda i numeri magici. Si lo so. Aspetta.
Quando applichi il concetto Non ripetere te stesso, rifattori la duplicazione. Principalmente questa è una buona cosa, ma alcune duplicazioni esistono per una ragione. Potrei sostituire ogni variabile costante che è 3 con 3. Perché non io? Perché i nomi delle variabili rappresentano concetti diversi. Strutturalmente è ancora solo un 3 ma vogliamo più della struttura. Questo stesso concetto esiste anche in funzioni, classi, moduli e test.
Ciò di cui stai parlando è praticamente l'applicazione DRY ai diversi tipi di test. Questo va bene, ma non fare l'errore classico che le persone fanno quando applicano eccessivamente DRY. Non è la duplicazione strutturale che vogliamo eliminare. Vogliamo che ogni decisione vada in un solo posto. Se due decisioni separate sembrano identiche, non stritolarle e fingere di essere la stessa decisione. Va bene avere due vars costanti uguali a 3. È normale avere due metodi che contengono lo stesso codice. Va bene avere due tipi di test che testano la stessa cosa. Finché l'idea è diversa. Fintanto che l'attore al quale il codice è responsabile è diverso.
Lo so, è difficile. È molto più facile giudicare in base a come appare il codice, ma quello che ci interessa davvero è quello che serve. Ho parlato per l'ultima volta di questa idea qui .
Quindi non dirmi che il test è completo solo perché hai una copertura completa del codice. Questo non è il punto principale del test. Non lo sarà mai. Si suppone ci rassicuri che la base di codice fa quello che le persone si aspettano che faccia. E molte persone diverse hanno molte aspettative diverse.
Ora tutto ciò che è stato detto, se le persone sono aggrappate a vecchi test a causa di preoccupazioni che sono meglio affrontate da altri test, quindi scaricare i vecchi test. Altrimenti le cose si confondono.