我的MainActivity
中有一个方法,我想模仿A
实例:
public void some_method() {
A a = new A();
....
}
所以我尝试在MainActivity
类中创建一个方法
public A createA(){return new A()}
然后some_method
变为
public void some_method() {
A a = createA();
....
}
我试过这个
MainActivity mainActivitySpy = (MainActivity)Mockito.spy(MainActivity.class);
when(mainActivity.createA()).thenReturn(null)
但是我收到此错误消息
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
有没有办法模拟构造函数?我尝试了一个解决方案SO
post(撰写本文时为18分,没有Poweermockito
的解决方案),但我无法完成这项工作,因为我没有认为它是功能性的
答案 0 :(得分:0)
使用Mockito你不能模拟constuctor,但你可以使用PowerMockito。
问题在于,您的间谍电话必须是实际的实例。你不能在调用模拟类中调用它。
MainActivity activityInstance = <get your activity instance>;
MainActivity mainActivitySpy = Mockito.spy(activityInstance);
when(mainActivity.createA()).thenReturn(null);
答案 1 :(得分:0)
我会将模拟的A对象作为参数传递给some_method()。您还可以为A对象创建一个特殊工厂,然后您可以模拟工厂
答案 2 :(得分:0)
您正在为MainActivity
创建一个名为mainActivitySpy
的间谍,但您正在调用when
对象调用mainActivity
,我认为该对象不是模拟也不是间谍。更改when
调用会产生预期的效果:
import static org.mockito.Mockito.*;
public class MainActivity {
public A createA(){
return new A();
}
public void some_method() {
A a = createA();
System.out.println("Mock:" + a);
}
public static void main(String[] args) {
MainActivity mainActivitySpy = (MainActivity)spy(MainActivity.class);
when(mainActivitySpy.createA()).thenReturn(null);
mainActivitySpy.some_method();
}
}