지난 몇 주 동안 저는 테스트 방법론의 차이를 메우는 방법을 연구하고있었습니다. 간략하게 말하면 단위 테스트는 너무 작고 기존 통합 테스트는 너무 큽니다.
빈번한 시나리오가 등장 A
하고 B
모두 사용하는 구성 요소를 C
. 그러나 A
에 B
대해 약간 다른 요구 사항이 있으며에 대해 약간 다른 가정을 C
합니다. 내가 A
어떻게 그리고 어디에서 내 가정을 테스트 C
합니까?
분명히 모의 A
가정을 사용한 단위 테스트 는 격리 C
테스트 A
에 적합하지만 가정 자체를 테스트하지는 않습니다.
또 다른 가능성은에 대한 단위 테스트를 추가하는 것입니다 C
. 그러나 이것은 A
개발 중일 때 C
진화하는 가정에서 테스트를 변경하는 A
것이 지나치게 어색 하기 때문에 이상적이지 않습니다 . 실제로 A
개발자는 단위 테스트 C
(예 : 외부 라이브러리)에 대한 적절한 액세스 권한이 없을 수도 있습니다 .
좀 더 구체적인 예제를 사용하여이를 구성하려면 다음을 수행하십시오. 이것이 노드 응용 프로그램이라고 가정하십시오. A
과 B
에 따라 C
(다른 것들 사이) 파일을 읽고에 전달 된 객체의 파일 내용을 저장합니다 C
. 처음에 C
처리하는 모든 파일 은 작고 상당한 차단없이 동 기적으로 읽을 수 있습니다. 그러나 개발자는 B
파일이 C
커지고 비동기 읽기 로 전환해야한다는 것을 알고 있습니다. 에 산발적 인 동기화 버그가 발생하여 파일을 동 기적으로 읽는 A
다고 가정 C
합니다.
이는 전체 통합 테스트에서 추적하기 어려운 버그 유형이며 통합 테스트에서 전혀 발견되지 않을 수 있습니다. 또한 가정이 모의 A
되기 때문에 단위 테스트 에서도 포착되지 않습니다 A
. 그러나 쉽게 단지 행사는 "미니"통합 테스트에 의해 잡힐 수 A
및 C
.
이 유형의 테스트에 대한 몇 가지 참조 만 찾았습니다. 소형의 통합 , 구성 요소 통합 테스트 , 단위 통합 테스트. 또한 공식적인 TDD 단위 테스트보다는 BDD 테스트 방향 과 관련이 있습니다 .
이 테스트 간격을 어떻게 채우나요? 구체적으로, 이러한 테스트를 어디에 두어야합니까? 어떻게의 입력 조롱 않습니다 A
와 C
"미니"통합 시험을? 그리고 이러한 테스트와 단위 테스트 사이의 테스트 문제를 분리하기 위해 얼마나 많은 노력을 기울여야합니까? 아니면 테스트 간격을 채우는 더 좋은 방법이 있습니까?