공용 메서드 호출의 경우 EasyMock의 capture()를 사용하면 & 메서드에 전달 된 인수를 검사 할 수 있습니다. 개인 메서드 호출의 경우 PowerMock의 expectPrivate를 사용하여 개인 메서드 호출을 모의 공격 할 수 있습니다.EasyMock 및 PowerMock으로 개인 메서드 인수 캡처
어떻게 든 이들을 결합하여 개인 메서드 호출에 전달 된 인수를 얻을 수 있습니까? 예 :이 경우
public class Program
{
public FancyReturnType PublicMethod()
{
ArbitraryType localInstance = new ArbitraryType();
localInstance.setFoo(somePrivateHelperMethod());
localInstance.setBar(increasinglyComplexMagic());
long aLongValue = 11235L;
// more variables, more work
SomeType worker = privateHelperToIntercept(localInstance, aLongValue, otherVariables);
if (worker.something)
{
return retVal.aFancyReturnType;
}
else
{
return retVal.anotherFancyReturnType;
}
}
}
, 나는 그것이 privateHelperToIntercept()
호출에 의해 소비로 localInstance
개체를 검사 할.
개인 메소드 호출을 조롱하는 예제가 많이 있습니다. PowerMock의 expectPrivate(partiallyMockedObject, "nameOfPrivateMethod", arg1, arg2)
이 효과적입니다. 공용 메서드 호출에 전달 된 인수를 가로 채기위한 예제도 발견했습니다. someMockedObject.PublicMethod(capture(myTestCapture))
과 결합한 Capture<Type> myTestCapture = new Capture<Type>()
불행히도, 나는 둘이 함께 일할 수없고 그들을 결합하는 예도 찾을 수 없습니다. 아무도 이것을 할 길을 보지 못했습니까?
FWIW, 나는 Mockito가 이것을 할 수 있다고 생각하지만 소스/빌드/테스트 시스템에는 포함되어 있지 않습니다. 가능하다면 우리 시스템에서 새로운 라이브러리를 지원하는 과정을 피하고 싶습니다.
Bueler? ... Bueler? – Gus
나는 그 생각이 마음에 들지만, 불행히도 그 선택은 아니었다. "프로그램"클래스 샘플은 제품 코드 였으므로 해당 클래스를 통해 새로운 ArbitraryTypes를 추출하는 것은 좋지 않습니다. – Ben