Sembra essere opinione comune che si debbano solo testare metodi pubblici per una classe o un modulo e non per metodi privati. Se i metodi privati stanno facendo correttamente il loro lavoro, questo dovrebbe riflettersi nei metodi pubblici.
Detto questo, testando un metodo pubblico che effettua chiamate interne a metodi privati, dovresti testare per cose che potrebbero accadere in quel metodo privato? In sostanza, testare indirettamente il metodo privato?
Esempio semplificato:
// Basic JavaScript module
let MyModule = function() {};
MyModule.prototype.taco = function() {
...
burrito();
...
}
// Private function burrito
let burrito = function(){
...
if (somethingHappened) {
throw new Error('Oops!');
}
...
}
In questo caso, il metodo privato burrito
viene chiamato all'interno del metodo pubblico taco
. In alcune situazioni, burrito
può generare un errore.
Devo scrivere un test per taco
dove sto testando per vedere se un errore viene mai generato in determinate situazioni? Non sto testando tecnicamente per vedere se il metodo taco
stesso genera un errore, ma piuttosto se il metodo privato sottostante genera un errore.
È qualcosa che ritengo sia importante testare, ma dal momento che è forse una cattiva pratica testare direttamente i metodi privati, è questo il modo giusto per testarlo? O non dovrei provarlo affatto? Voglio solo assicurarmi che determinati errori vengano lanciati in modo prevedibile.
Ad esempio, se il metodo burrito
effettua una richiesta http su qualche server API da qualche parte, ma il server non è in linea al momento, genera un errore. Sarebbe bello scrivere un test per garantire che quando l'endpoint del server è offline, venga generato l'errore corretto.