클래스 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
하며 인터페이스의 이상적인 구현이 주어진 것으로 작동합니다.