TDD yapılırken sorun oluşur. Birkaç test geçişinden sonra, bazı sınıf / modüllerin dönüş tipleri değişir. Statik olarak yazılan bir programlama dilinde, başka bir sınıfın testlerinde önceki alaycı bir nesne kullanılmışsa ve tür değişikliğini yansıtacak şekilde değiştirilmemişse, derleme hataları oluşur.
Ancak dinamik diller için, dönüş türlerindeki değişiklik algılanamayabilir ve diğer sınıfın testleri yine de geçer. Elbette, daha sonra başarısız olması gereken entegrasyon testleri olabilir, ancak birim testleri hatalı olarak geçecektir. Bundan kaçınmanın bir yolu var mı?
Önemsiz bir örnekle güncelleme (bazı makyaj dillerinde) ...
Versiyon 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)
}
Şimdi, sürüm 2'de:
// I change the return types. I also update the tests for Calc
Calc = {
doMultiply(x, y) {return {result: (x * y), success:true}}
}
... Daha sonra Rect çalışma zamanında bir istisna atar, ancak test yine de başarılı olur.
class X
, ancak testlerinin üretimde karşılaştığından farklı bir sözleşmeyeclass Y
bağlı olduğuX
ve bu nedenle test edildiği ile ilgili olmasıdır.