Проблема виникає під час виконання TDD. Після пари тестування типи повернення деяких класів / модулів змінюються. Якщо статично типізована мова програмування, якщо попередній макетний об'єкт використовувався в тестах якогось іншого класу і не був модифікований для відображення зміни типу, тоді будуть виникати помилки компіляції.
Однак для динамічних мов зміни типів повернення можуть бути не виявлені, і тести іншого класу все ще пройдуть. Впевнені, що можуть бути тести інтеграції, які згодом повинні провалитися, але одиничні тести помилково пройдуть. Чи є спосіб, як цього уникнути?
Оновлення тривіальної вибірки (на деяких складених мовах) ...
Версія 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)
}
Тепер, у версії 2:
// I change the return types. I also update the tests for Calc
Calc = {
doMultiply(x, y) {return {result: (x * y), success:true}}
}
... Тоді Rect викине виняток під час виконання, проте тест все одно буде успішним.
class X
, а в тестах,class Y
які залежать від цього,X
і, таким чином, піддається тестуванню проти іншого контракту, ніж те, на що він працює у виробництві.