對於公共方法調用,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;
}
}
}
在這種情況下,我想檢查localInstance
對象,因爲它是由privateHelperToIntercept()
呼叫消耗。
我發現很多例子來模擬私人方法調用; PowerMock的expectPrivate(partiallyMockedObject, "nameOfPrivateMethod", arg1, arg2)
效果很好。我還找到了攔截傳遞給公共方法調用的參數的例子; Capture<Type> myTestCapture = new Capture<Type>()
加上someMockedObject.PublicMethod(capture(myTestCapture))
。
不幸的是,我既不能讓兩者一起工作,也找不到將它們組合的例子。有沒有人看到一種方法來做到這一點?
FWIW,我懷疑Mockito可以做到這一點,但它不包含在我們的源代碼/構建/測試系統中。如果可能的話,我想避免在我們的系統中支持新庫的過程。
Bueler?... Bueler? – Gus 2012-08-20 14:56:26
我喜歡這個主意,但不幸的是這不是一個選項。 「Program」類示例是產品代碼,現在不是通過該類提取新的ArbitraryTypes的好時機。 – Ben 2012-09-25 18:59:18