Fino a che punto si testano i componenti interni / privati di una classe / modulo / pacchetto / ecc.? Li testate o testate semplicemente l'interfaccia con il mondo esterno? Un esempio di questi interni è metodi privati.
Ad esempio, immagina un parser di discesa ricorsivo , che ha diverse procedure interne (funzioni / metodi) chiamate da una procedura centrale. L'unica interfaccia con il mondo esterno è la procedura centrale, che accetta una stringa e restituisce le informazioni analizzate. Le altre procedure analizzano diverse parti della stringa e vengono chiamate dalla procedura centrale o da altre procedure.
Ovviamente, dovresti testare l'interfaccia esterna chiamandola con le stringhe di esempio e confrontandola con l'output analizzato a mano. Ma per quanto riguarda le altre procedure? Li testerete individualmente per verificare che analizzino correttamente le loro sottostringhe?
Posso pensare ad alcuni argomenti:
Pro :
- Un maggior numero di test è sempre migliore e questo può aiutare ad aumentare la copertura del codice
- Alcuni componenti interni potrebbero essere difficili da fornire input specifici (ad esempio casi limite) dando input all'interfaccia esterna
- Test più chiaro. Se un componente interno ha un bug (fisso), un test case per quel componente chiarisce che il bug era in quel componente specifico
Contro :
- Il refactoring diventa troppo doloroso e richiede molto tempo. Per cambiare qualcosa, è necessario riscrivere i test unitari, anche se gli utenti dell'interfaccia esterna non sono interessati
- Alcune lingue e framework di test non lo consentono
Quali sono le tue opinioni?