void 메서드를 테스트하고 해당 종속성이 전달 된 참조의 상태를 변경할 때 종속성을 조롱하는 데 문제가 있습니다. 나는 부작용이 void 메쏘드에서 관찰 될 수 있고 행동 또한 관찰 될 수 있음을 이해하지만 이러한 지침을이 코드에 적용하는 데 어려움을 겪고 있습니다. 비슷한 질문이 있지만 상태에 대한 후속 로컬 변경 사항을 처리 할 수있는 항목을 찾을 수 없습니다. 나는 JUnit을 이용하고 있고 Mockito는 ... 저는 여기에 대해서 이야기하고있는 코드의 인위적인 버전입니다 : 나는 MergingObject 개체에 대한 모의를 만들 경우 여기유닛 테스팅 무효 메서드와 후속 작업으로 상태가 변경되는 종속성
@Mock
MergingObject mergingObject;
@Override
public void process(Foo foo1) {
Foo foo2 = getAnInstanceOfFoo(); // private
Foo foo3 = mergingObject.merge(foo1, foo2); // public
foo1.copySomeValues(foo3);
}
수수께끼입니다. merge (...) 연산이 결코 호출되지 않기 때문에 우리가 객체를 조롱하면 사라질 것으로 예상되는 상태 변화가 사라집니다. 병합 (...)이 foo1과 foo2의 올바른 인스턴스로 호출되었지만 후속 copySomeValues (...) 호출이 여전히 NullPointerException을 throw하는지 확인할 수 있습니다.
제안 사항?
잘 모의 개체에 병합을 구현할 수 있습니다! exacly 분명하지만, 당신은 병합 변경 foo1 및/또는 foo2 당신을 말하지 않습니다? –
내가 그렇게 할 수 있다면 꽤 흥미 롭다. 이 경우 병합은 foo1 및 foo2의 내용을 기반으로 새 인스턴스를 반환합니다. 이를 위해서는 후속 "복사"단계가 필요합니다. –
1 분 동안 부작용을 테스트하고 있다고 생각했습니다. 나는 그 문제를 푸는 키스 태도를 가지고 부작용을 제거합니다. –