使用PowerMock模拟一个类而不在Junit中运行

时间:2014-12-26 11:30:17

标签: java unit-testing junit powermock

@Runwith(PowerMockRunner.class)
@PrepareForTest(Test.class)
public class A {
    public static void main(String []args){
        PowerMockito.mockStatic(Test.class);
        when(Test.foo()).thenReturn(true);
        B.foo();
    }
}

B的实现是这样的

public class B{
    public static void foo(){
        boolean f = Test.foo();
    }
}

我正在编写代码来测试B.foo()哪些调用Test.foo()我想模仿Test.foo()以便始终返回true。但是当我运行此代码时,它会产生错误when() requires an argument which has to be 'a method call on a mock。我无权编辑B类或类Test。如果我将A类中的方法设为Junit,它可以正常工作。但我不能像Junit一样运行它,因为我在很多输入上运行它。有没有Junit的方法来模拟一个方法?

1 个答案:

答案 0 :(得分:0)

两个问题:

  • 您要求测试准备Test.class而不是B.class。
  • 您正在使用mockito和powermock?你应该使用

    期望(Test.foo())andReturn(真);

而不是

when(Test.foo()).thenReturn(true);

完成后,您应该像以下一样调用重播:

replay(Test.class);