我正在尝试模拟从我的班级调用另一个类的实例。我看到的问题是,当我运行测试时,看起来我的模拟对象没有被真实对象替换。我在这里做了一个简单的例子来解释这个案子。在这里,我想打印tada
而不是this is awsome
默认情况下方法printAwsome()
执行的操作。我已将我的代码放在下面的链接中以供参考,请让我知道我做错了什么。
https://gist.github.com/anonymous/1eab366c60efb75b9075f100a67c851b
当我尝试模仿this is awsome
时,ExcelSupporTest会打印tada
而不是optionPane.printAwsome()
,有人会指出我在这里做错了什么。
答案 0 :(得分:0)
我可以推断出问题,如果你试图模拟对方法showMessageDialog
的调用,请尝试模拟DefaultOptionPane
,如下所示:
DefaultOptionPane defaultOptionPane = mock(DefaultOptionPane.class);
when(defaultOptionPane.showMessageDialog(anyObject(), anyObject(), anyString(), anyInt()))
.then(//do what you want to do here <Answer>);
这简单意味着它的可读性也就是每当您使用任何一组参数调用showMessageDialog
时,您希望在Answer
中返回您声明为then
的内容
答案 1 :(得分:0)
这么长的故事很短,除非你把它作为参数传递给方法你不能模拟方法调用。
它成为范围界定的问题所以替换此
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