Powermock 在静态方法调用中尝试模拟静态方法调用时调用初始方法

Powermock invokes initial method when trying to mock static method call within static method call

Powermock 不模拟静态方法调用而是在 then() 语句中调用初始方法有什么原因吗?

这是我有一系列方法调用的情况:

TestClass方法 -调用-> Class1方法 -调用-> Class2静态方法 -call-> Class3 静态方法 -call-> Class4 方法.

Class4 方法尝试查找上下文中不存在的对象并挂起,因此我尝试使用 Powermock 模拟 public 静态 Class3 方法。

所有 类 和方法都是非最终的。 我使用 TestNg。我的 testMethod 有一个 @PrepareForTest 我尝试了以下方法来模拟方法调用:

PowerMockito.mockStatic(Class3.class);
when(Class3.callEvilMethod()).thenReturn("test");

OR 而不是 when-thenReturn:

doReturn("test").when(Class3.callEvilMethod());

doAnswer(new Answer() {methos that returns test"}).when(Class3.callEvilMethod());

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();
    }
}

好的,应该解决问题但在我的测试中遗漏的是:

 @ObjectFactory
    public IObjectFactory setObjectFactory() {
    return new PowerMockObjectFactory();
}

或者简单地继承自 PowerMockTestCase

Details