我们可以使用 powermock 使用以下行来模拟对象创建:
MyClass myObj = getMyObj();
PowerMockito.whenNew(MyClass.class).withAnyArguments().thenReturn(myObj);
现在在我正在编写测试用例的类里面,我有这种逻辑:
public class TestClass {
public void testMethod() {
MyClass obj = new MyClass();
boolean flag = doSomeOperation();
if(flag) {
MyClass obj1 = new MyClass();
//doSomeOtherOp();
}
}
}
这里我想模拟第二个对象创建obj1
,是否可以用powermock来控制我要模拟哪个对象。在这里,我不想模拟第一个对象 obj
。
最佳答案
我认为这很简单:
PowerMockito.whenNew(MyClass.class).withAnyArguments().thenReturn(firstResult)
.thenReturn(anotherResult);
但不幸的是,尽管在其他上下文中链接是可能的,但 PowerMockito 似乎不允许这样做。
(类似于
when(someMock.toString()).thenReturn("a").thenReturn("b");
System.out.println(someMock.toString() +factory.toString();
很好地打印了ab
! )
所以我现在能给出的唯一答案是:你编写了很难测试的代码。考虑不要这样做。
您应该退后一步并更改您的设计,而不是依赖 PowerMock 来模拟对 new()
的调用。例如,在生产代码中使用工厂。因此,您无需直接调用 new()
,只需向工厂询问新实例即可。并且无需 PowerMock(ito) 即可轻松模拟该工厂。
关于java - 我们可以使用 powermock 模拟第二个对象创建吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51496671/