클래스 X가 있고 동작 X1을 확인하는 몇 가지 단위 테스트를 작성합니다. X를 종속성으로 사용하는 클래스 A도 있습니다.
A에 대한 단위 테스트를 작성할 때 X를 조롱합니다. 즉, 단위 테스트 A 동안 X의 모의 동작을 X1로 설정 (가정)합니다. 시간이 지남에 따라 사람들이 시스템을 사용하고 변화가 필요하며 X가 진화합니다. X를 수정하여 X2 동작을 표시합니다. 분명히, X에 대한 단위 테스트는 실패 할 것이고 당신은 그것들을 적응시켜야합니다.
그러나 A는 어떻습니까? X 동작이 수정 될 때 (X 조롱으로 인해) A에 대한 단위 테스트가 실패하지 않습니다. "실제"(수정 된) X로 실행할 때 A의 결과가 다르다는 것을 감지하는 방법은 무엇입니까?
나는 "그것이 단위 테스트의 목적이 아닙니다"라는 라인을 따라 대답을 기대하고 있습니다. 그러나 단위 테스트는 어떤 가치가 있습니까? 모든 테스트가 통과 될 때 주요 변경 사항을 도입하지 않았다는 것을 실제로 알려주는 것입니까? 그리고 어떤 클래스의 행동이 (의지 적이든 또는 의지 적이든) 변할 때, 모든 결과를 어떻게 (바람직하게는 자동화 된 방식으로) 감지 할 수 있습니까? 통합 테스트에 더 집중해서는 안됩니까?
X1할 때 X인터페이스 를 구현 한다고 말하고 있습니다 X1. 다른 테스트에서 사용한 모의로 인터페이스 X1를 변경하면 X2더 이상 컴파일되지 않아야하므로 해당 테스트도 수정해야합니다. 수업 행동의 변화는 중요하지 않습니다. 실제로 클래스 A는 구현 세부 사항 (이 경우 변경 될 내용)에 의존해서는 안됩니다. 따라서 단위 테스트 A는 여전히 정확 A하며 인터페이스의 이상적인 구현이 주어진 것으로 작동합니다.