중첩 함수 호출의 시나리오에서 모의 테스트에 심각한 개념적 문제점이 있습니다. 내 프로젝트에서 JUnit과 Mockito를 사용하고 있습니다. 내가 다음 예와 내 문제를 설명하자 -중첩 함수 호출을위한 모의토 모의 테스트
public class ClassA {
public void methodOne(param1, param2, param3, param4) {
// do something
String temp = methodTwo(param2, param3, param4);
// do something
}
public String methodTwo(param2, param3, param4) {
// do something
return methodThree(param2, param3) + methodFour(param4);
}
public String methodThree(param2, param3) {
// do something
return param2.get(0).getIndex + ":" + param3.getPosition();
}
public String methodFour(param4) {
// do something
return param4.getDetail() + "|" + param4.getCount();
}
}
을 우리가 methodThree()
및 methodFour()
같은 기본적인 방법을 테스트해야하는 경우, 우리는 (기능 테스트중인의 executtion을 지원하기 위해) 필요한 스터 빙에 필요한 PARAMS의 모의 객체를 생성 할 수 있습니다 그곳에서 실행 및 검증 (상태/행동)을 수행하십시오.
그러나 methodTwo()
같은 메소드는 이미 별도의 단위로 테스트 된 다른 함수를 중첩 호출합니다. 모의 객체를 methodTwo()
에 전달하면 중첩 된 메소드로 전달되어 NullPointerException()
으로 표시됩니다. 이러한 모의 객체는 중첩 된 함수 호출의 필요에 따라 스텁되지 않았습니다. 확실하게, 우리는 mocks에 여분의 스터 빙을 추가하여 중첩 된 호출에서도 원활한 실행을 지원할 수 있지만 이것은 분명 건강한 방법은 아닙니다. 우리가 methodOne()
또는 다른 어떤 것과 같은 큰 방법으로 이동할 때 스터 빙의 이러한 부담은 더 심해질 것입니다.
유닛 테스트에 관한 한, 테스트중인 유닛 이외에 다른 유닛에 대해서는 신경 쓰지 않습니다. 제가 틀린 위치를 안내하고 Unit and mock testing의 더 나은/적절한 방법을 제안하십시오. 감사.
David, 귀하의 제안에 동의합니다. 이제, 내가 틀렸다면 나를 바로 잡으십시오 - 행동 테스트는 테스트중인 메소드가 예상 한 문장을 따르고 있는지 확인하는 것입니다. 원하는 행동이나 명세를 보장하기 위해 필요한 것. 함수 안에서 수행되는 실제 구현에 신경 쓰지 않고 어떻게이를 수행 할 수 있습니까? "사양보기"라는 용어로 상태 확인을 의미합니까? 지식 격차를 해소하기위한 적절한 참조를 명확히 제시하고 제공하십시오. 감사. –