在静态方法调用

时间:2016-01-18 10:51:47

标签: java unit-testing mocking static-methods powermock

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

1 个答案:

答案 0 :(得分:0)

好的,我的测试中应该解决的问题是:

delete

或只是从 @ObjectFactory public IObjectFactory setObjectFactory() { return new PowerMockObjectFactory(); }

升级

Details