public class A {
public static B b = new B();
}
public B{
public void method(Interface arg){}
}
public C {
public void method2 (Object arg2){
InterfaceInstance d = new InterfaceInstance;
A.b.method(d);
}
}
我想测试A.b.method()是否在C类的方法method2()中执行。 我怎么能嘲笑?感谢。
答案 0 :(得分:3)
不同的观点:
静态是良好OO设计中的异常。你应该有充分的理由想出你想要调用方法的静态字段。因为它们迫使您使用PowerMock(ito)来测试它。
所以:而不是转向“大”PowerMock锤子,以某种方式使您能够测试难以测试的代码;考虑退一步并改进你的设计!
含义:静态调用在类之间创建直接的低级耦合。对于“真实世界”的应用程序,这是你真正想要避免的。
答案 1 :(得分:2)
可以这样,
PowerMockito.mockStatic(A.class);
ArgumentCaptor<Object> captor = ArgumentCaptor.forClass(Object.class);
PowerMockito.doNothing().when(
A.class, "method", captor.capture());//mock static
C c = new C();
c.method2(new String("Mock"));
PowerMockito.verifyStatic(times(1));
Object obj = captor.getValue();//if you want check the object passed
答案 2 :(得分:0)
您有两种方法可以解决您的问题:
至于我,我更喜欢在这种情况下使用抑制静态初始化,因为它给了我更多的控制权。
<select id="getManager" resultMap="user">
select .......
</select>
我没有检查过代码。一般的想法是如何解决你的问题。