试图模拟我的静态方法并需要返回一个对象,但它的对象总是返回null

时间:2013-11-20 14:46:15

标签: java junit mocking

这是我的代码

@Test

public void testProcess() throws Exception {

    GenericResults result = new GenericResults();
    result.setCount(2);
    result.setSuccess(true);
    result.setTarget((Integer)100);

PowerMockito.when(PrcssDAO.createProcess(Matchers.anyString(), Matchers.anyString())).thenReturn(result);

}

返回的result对象始终为null。这是为什么?

2 个答案:

答案 0 :(得分:1)

您是否考虑过测试类中的这些步骤:

  1. 使用@RunWith(PowerMockRunner.class)注释 测试用例的类级别。
  2. 使用@PrepareForTest(ClassThatContainsStaticMethod.class) 测试用例的类级别的注释。
  3. 使用PowerMock.mockStatic(ClassThatContainsStaticMethod.class) 模拟这个类的所有方法。
  4. 使用PowerMock.replay(ClassThatContainsStaticMethod.class)进行更改 重播模式的课程。
  5. 使用PowerMock.verify(ClassThatContainsStaticMethod.class)进行更改 要验证模式的类。
  6. 这是source

答案 1 :(得分:0)

好的,我在本地复制你的代码以弄明白,你需要使它工作的是在你的代码中添加上面提到的答案的第三个选项,这样测试的代码就会变成:

@Test
public void testProcess() throws Exception {
    GenericResults result = new GenericResults();
    result.setCount(2);
    result.setSuccess(true);
    result.setTarget(100);
        // The next line is the one you're missing
    PowerMockito.mockStatic(PrcssDAO.class);
    Mockito.when(PrcssDAO.createProcess(Matchers.anyString(), Matchers.anyString())).thenReturn(result);
    assertNotNull(PrcssDAO.createProcess("any", "argument"));
}