gpt4 book ai didi

java - 当尝试在静态方法调用中模拟静态方法调用时,Powermock 会调用初始方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:00 25 4
gpt4 key购买 nike

Powermock 是否有任何原因不会模拟静态方法调用,而是在 then() 语句中调用初始方法?

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

TestClass方法 -call-> Class1方法 -call-> 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语句中被调用。我不知道为什么。难道不应该被 mock 吗?

编辑:我调整了我的测试来向您展示它的样子:

@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

关于java - 当尝试在静态方法调用中模拟静态方法调用时,Powermock 会调用初始方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34852895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com