Il problema si verifica mentre si esegue TDD. Dopo un paio di passaggi di test, i tipi di ritorno di alcune classi / moduli cambiano. In un linguaggio di programmazione tipizzato in modo statico, se nei test di alcune classi altro è stato utilizzato un oggetto simulato precedente e non è stato modificato per riflettere la modifica del tipo, si verificheranno errori di compilazione.
Tuttavia, per le lingue dinamiche, la modifica dei tipi di ritorno potrebbe non essere rilevata e i test della classe altra continueranno a essere trasmessi. Certo potrebbero esserci dei test di integrazione che dovrebbero fallire in seguito, ma i test unitari passerebbero erroneamente. C'è un modo per evitarlo?
Aggiornamento con un campione banale (in alcune lingue inventate) ...
Versione 1:
Calc = {
doMultiply(x, y) {return x * y}
}
//.... more code ....
// On some faraway remote code on a different file
Rect = {
computeArea(l, w) {return Calc.doMultipy(x*y)}
}
// test for Rect
testComputeArea() {
Calc = new Mock()
Calc.expect(doMultiply, 2, 30) // where 2 is the arity
assertEqual(30, computeArea)
}
Ora, nella versione 2:
// I change the return types. I also update the tests for Calc
Calc = {
doMultiply(x, y) {return {result: (x * y), success:true}}
}
... Rect genererà quindi un'eccezione in runtime, ma il test continuerà comunque.