Sto scrivendo alcuni test per un modulo NodeJS, ma questa domanda può essere applicata per qualsiasi lingua / piattaforma. Ho la seguente situazione:
// in moduleA.js
exports.foo = function (var1, var2) {
// do something to var1 and var2 here
baz(var1, var2);
};
exports.bar = function (var1, var2) {
// do something completely different to var1 and var2 here
baz(var1, var2);
};
function baz(var1, var2) {
// do something to var1 and var2 yet again that both foo and bar need
moduleB.doSomething(var1, var2);
}
Quindi, sia foo
che bar
sono metodi pubblici di moduleA
. Hanno alcune funzionalità specifiche (fanno cose diverse a var1
e var2
) ma anche alcune funzionalità condivise (per mantenere le cose asciutte l'ho spostato in un metodo privato, baz
) e poi chiamano entrambe un metodo pubblico su moduleB
.
Ho cancellato moduleB
quindi so esattamente cosa sta succedendo dopo aver chiamato foo
e bar
. Sto scrivendo i test per foo
e% per la funzionalità specifica di% di gen_de ma non sono sicuro al 100% come affrontare la verifica della funzionalità condivisa in bar
.
Mi sembra di avere tre opzioni:
- scrivi test identici sia per
baz
chefoo
che testano le cose inbar
- scrivi un singolo test per
baz
e non scrivi lo stesso test perfoo
poiché sai chebar
funziona - espone
baz
come un altro metodo pubblico per il modulo e testalo separatamente.
Mi sto appoggiando alla prima opzione, ma sento che potrei mancare qualcosa.