我试图嘲笑我的班级其他类的呼叫。我看到的问题是,当我运行测试时,看起来我的模拟对象并没有被真实对象替换。我在这里举了一个简单的例子来解释此案。在这里,我想打印tada
而不是this is awsome
,方法printAwsome()
默认使用。我已经将代码放在下面的链接中以供参考,请让我知道如果有的话,我在做什么。
https://gist.github.com/anonymous/1EAB366C6C60EFB75B9075F100A67C851B
excelsupportest打印this is awsome
而不是tada
,当我尝试模拟optionPane.printAwsome()
时,有人可以将我指向我在这里做错了什么。
我可以推断出的问题,如果您想模拟对方法showMessageDialog
的呼叫,请尝试嘲笑DefaultOptionPane
如下:
DefaultOptionPane defaultOptionPane = mock(DefaultOptionPane.class);
when(defaultOptionPane.showMessageDialog(anyObject(), anyObject(), anyString(), anyInt()))
.then(//do what you want to do here <Answer>);
当您使用任何一组参数拨打showMessageDialog
时,这也是可读性的,您想返回您要返回then
中的Answer
的内容。
很长的故事很短,除非您将其作为参数传递给方法,否则无法模拟方法调用。
它成为范围的问题,因此更换此
public void testMethod() {
DefaultOptionPane optionPane = new DefaultOptionPane();
System.out.println("Entering method");
optionPane.printAwsome();
System.out.println("Exiting Method");
}
使用此
public void testMethod(DefaultOptionPane optionPane) {
System.out.println("Entering method");
System.out.println(optionPane.printAwsome());
System.out.println("Exiting Method");
}
然后您可以模拟optionPane