클래스 내부 호출이 일반적인 프로젝트에서 작업하고 있지만 결과는 여러 번 간단한 값입니다. 예 ( 실제 코드 아님) :
public boolean findError(Set<Thing1> set1, Set<Thing2> set2) {
if (!checkFirstCondition(set1, set2)) {
return false;
}
if (!checkSecondCondition(set1, set2)) {
return false;
}
return true;
}
이 유형의 코드에 대한 단위 테스트를 작성하는 것은 실제 조건의 구현이 아니라 조건 시스템을 테스트하고 싶기 때문에 실제로 어렵습니다. (나는 별도의 테스트 에서이 작업을 수행합니다.) 실제로 조건을 구현하는 함수를 전달하고 테스트에서 단순히 모의를 제공하는 것이 좋습니다. 이 접근 방식의 문제점은 노이즈입니다. 제네릭을 많이 사용 합니다.
작동하는 솔루션; 그러나 테스트 된 객체를 스파이 로 만들고 내부 함수에 대한 호출을 조롱하는 것입니다.
systemUnderTest = Mockito.spy(systemUnderTest);
doReturn(true).when(systemUnderTest).checkFirstCondition(....);
여기서 SUT의 구현이 효과적으로 변경되어 테스트를 구현과 동기화하는 것이 문제가 될 수 있습니다. 이것이 사실입니까? 이러한 내부 메소드 호출을 피하는 모범 사례가 있습니까?
우리는 알고리즘의 일부에 대해 이야기하고 있으므로 여러 클래스로 나누는 것이 바람직한 결정이 아닐 수도 있습니다.