我不确定您是否可以在这里逃脱工厂或将对象作为参数传递。这可能感觉像是一个额外痛苦的世界,但如果您希望模拟对象,您通常必须以特定的风格编写代码。
我会倾向于工厂方向(当然定义为接口)。模拟工厂并让它在调用时返回您的模拟对象getMyObject()
:
public void myMethod(int p1, int p2, MyObject mo) {
MyObject mo = factory.getMyObject(...args...);
int returnedId = mo.doOperation(something);
}
public interface SomeFactory {
MyObject getMyObject(...args...);
}
或者您可以创建一个接受 aMyObject
作为参数的方法的重载版本,但这有点难看:
// Test this one, mocking 'mo'
public void myMethod(int p1, int p2, MyObject mo) {
MyObject mo = new MyObject(var1,var2);
int returnedId = mo.doOperation(something);
}
public void myMethod(int p1, int p2) {
myMethod(p1, p2, new MyObject(...));
}