我必须为静态方法编写单元测试,这需要模拟同一个类的另一个静态方法。 示例代码:
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方法的帮助都会受到赞赏。谢谢!
答案 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)
false
是boolean
的默认值这一事实起了作用。您希望调用错误的foo
,而事实上bar
未被调用。长话短说:
when(A.bar()).thenCallRealMethod();