为什么Powermock不会模拟静态方法调用而是在then()语句中调用初始方法?
以下是我有一系列方法调用的情况:
TestClass方法 -call-> Class1方法 -call-> Class2静态方法 -call-> Class3静态方法 -call-> Class4方法。
Class4方法尝试查找上下文中不存在的对象并挂起,所以我试图用Powermock模拟公共静态Class3方法。
所有课程和方法都不是最终的。 我使用TestNg。我的testMethod有一个@PrepareForTest 我尝试了以下方法来模拟方法调用:
PowerMockito.mockStatic(Class3.class);
when(Class3.callEvilMethod()).thenReturn("test");
OR而不是when-thenReturn:
doReturn("test").when(Class3.callEvilMethod());
OR
doAnswer(new Answer() {methos that returns test"}).when(Class3.callEvilMethod());
OR
PowerMockito.stub(PowerMockito.method(Class3.class, "callEvilMethod")).toReturn("test");
但是当我运行测试时,初始的Class3.callEvilMethod()会在when语句中被调用。我不明白为什么。不应该被嘲笑吗?
编辑:我调整了我的测试,向您展示它的样子:
@PrepareForTest( { Class1.class, Class2.class, Class3.class})
public class TestClass extends AbstractTest {
private Class1 class1;
@BeforeMethod
public void setUp() throws Exception {
class1 = new Class1() {
}
@Test
public void testMethod() throws Exception {
// Create various objects in Db, do other method calls, then:
PowerMockito.mockStatic(Class3.class);
// PowerMockito.suppress(PowerMockito.method(Class3.class, "evilMethod"));
// PowerMockito.when(Class3.EvilMethod()).thenReturn("test");
// doReturn("test").when(Class3.evilMethod());
// PowerMockito.stub(PowerMockito.method(Class3.class, "evilMethod")).toReturn("test");
class1.callMethod();
}
}
答案 0 :(得分:0)
好的,我的测试中应该解决的问题是:
delete
或只是从 @ObjectFactory
public IObjectFactory setObjectFactory() {
return new PowerMockObjectFactory();
}