Java 如何模拟静态字段';执行了什么无效方法?
我想测试A.b.方法()是否在类C的方法method2()中执行。 我怎么能嘲笑你?谢谢。可以是这样Java 如何模拟静态字段';执行了什么无效方法?,java,mockito,powermock,Java,Mockito,Powermock,我想测试A.b.方法()是否在类C的方法method2()中执行。 我怎么能嘲笑你?谢谢。可以是这样 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 InterfaceInstan
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);
}
}
PowerMockito.mockStatic(A.class);
ArgumentCaptor captor=ArgumentCaptor.forClass(Object.class);
PowerMockito.doNothing()。何时(
类,“方法”,captor.capture()//模拟静态
C=新的C();
c、 方法2(新字符串(“模拟”);
PowerMockito.verifyStatic(次(1));
Object obj=captor.getValue()//如果需要,请检查传递的对象
可能是这样
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);
}
}
PowerMockito.mockStatic(A.class);
ArgumentCaptor captor=ArgumentCaptor.forClass(Object.class);
PowerMockito.doNothing()。何时(
类,“方法”,captor.capture()//模拟静态
C=新的C();
c、 方法2(新字符串(“模拟”);
PowerMockito.verifyStatic(次(1));
Object obj=captor.getValue()//如果需要,请检查传递的对象
不同的观点:
静态是好的OO设计中的一个异常。您应该有很好的理由提出要调用方法的静态字段。因为它们迫使您使用PowerMock(ito)进行测试
因此:不要求助于“大”的PowerMock锤子,以某种方式使您能够测试难以测试的代码;考虑退一步,改进你的设计!
含义:静态调用在类之间创建直接的低级耦合。对于“真实世界”的应用程序,您确实希望避免这种情况。不同的观点: 静态是好的OO设计中的一个异常。您应该有很好的理由提出要调用方法的静态字段。因为它们迫使您使用PowerMock(ito)进行测试 因此:不要求助于“大”的PowerMock锤子,以某种方式使您能够测试难以测试的代码;考虑退一步,改进你的设计!
含义:静态调用在类之间创建直接的低级耦合。对于“真实世界”的应用程序,您确实希望避免这种情况。您有两种解决问题的方法:
- A班的学生
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
我还没有检查密码。这是解决问题的基本思路 解决问题有两种方法:
- A班的学生
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
我还没有检查密码。这是解决问题的基本思路 org.powermock.reflect.exceptions.MethodNotFoundException:未找到参数类型为的方法我已更改代码。方法arg被设计为接口。但是在method2中,已经创建了接口的实例。我无法在ArgumentCaptor.forClassorg.powermock.reflect.exceptions.MethodNotFoundException中使用interface.class:未找到参数类型为的方法我已更改代码。方法arg被设计为接口。但是在method2中,已经创建了接口的实例。我不能在ArgumentCaptor.ForClassic中使用interface.class如果我可以修改代码,我不会要求它here@wmmj23你不会相信我听到过多少次相反的话。在这种情况下,kuhajeyan的答案可能会对您有更多帮助。如果我可以修改代码,我不会问它here@wmmj23你不会相信我听到过多少次相反的话。在这种情况下,kuhajeyan的回答可能会对你有更多帮助。