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}}
}
... 그런 다음 런타임시 예외가 발생하지만 테스트는 계속 성공합니다.
class X
아니라 테스트가 프로덕션에서 실행되는 것과 다른 계약에class Y
따라 테스트를 받는X
것입니다.