模拟外部方法调用来自类Juints

时间:2016-12-06 23:22:28

标签: java junit mocking mockito powermock

我正在尝试模拟从我的班级调用另一个类的实例。我看到的问题是,当我运行测试时,看起来我的模拟对象没有被真实对象替换。我在这里做了一个简单的例子来解释这个案子。在这里,我想打印tada而不是this is awsome默认情况下方法printAwsome()执行的操作。我已将我的代码放在下面的链接中以供参考,请让我知道我做错了什么。

https://gist.github.com/anonymous/1eab366c60efb75b9075f100a67c851b

当我尝试模仿this is awsome时,ExcelSupporTest会打印tada而不是optionPane.printAwsome(),有人会指出我在这里做错了什么。

2 个答案:

答案 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