模拟一个静态方法,该方法调用同一个类的另一个静态方法

时间:2016-01-06 00:28:13

标签: java unit-testing mocking powermock

我必须为静态方法编写单元测试,这需要模拟同一个类的另一个静态方法。 示例代码:

public class A {
   public static boolean foo(){}
   public static boolean bar(){
       return foo();
   }
}

@PrepareForTest({A.class})
public ATest{
   testMethod(){
       mockStatic(A.class);
       when(A.foo()).thenReturn(true);
       assertTrue(A.bar());
   }

}

我一直试图对bar方法进行单元测试,但到目前为止还没有成功。

问题:调试没有到达我的代码中的return foo();语句,并且断言失败。请指教。我不能在这个时间点修改代码

任何有关模拟foo方法的帮助都会受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:5)

在这种情况下,您不应该在类上创建模拟,而是仅对类stub中的特定方法(foo())使用A

public static <T> MethodStubStrategy<T> stub(Method method)

上面的方法属于API中的MemberModifier类,它是PowerMockito类的超类,所以你的语法应该是这样的,

PowerMockito.stub(PowerMockito.method(A.class, "foo")).toReturn(true);

答案 1 :(得分:3)

falseboolean的默认值这一事实起了作用。您希望调用错误的foo,而事实上bar未被调用。长话短说:

when(A.bar()).thenCallRealMethod();