2016-12-06 109 views
-3

我试图嘲笑来自我的课程的另一个类的实例的调用。我看到的问题是,当我运行我的测试时,看起来我的模拟对象不会被真实对象所取代。我在这里举了一个简单的例子来解释这个案例。在这里,我想打印tada而不是的默认方法this is awsome。我已经把我的代码放在下面的链接中供参考,请让我知道我做错了什么,如果有的话。模拟来自课堂的外部方法调用注意:

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

ExcelSupporTest打印this is awsome代替tada当我试图嘲弄optionPane.printAwsome()可有人点我到我在做什么错在这里。

+1

我什么也没看到上面的嘲笑。你能分享一下你试图模拟方法/课程的代码吗?我也没有看到上面的任何测试。 – nullpointer

+0

我做了一个更简单的版本,以消除开销看看,让我知道如果这有助于 – user2540256

+0

你已经改变了问题360与代码删除以及。请改善问题以获得更好的理解。这也有助于更新问题 – nullpointer

回答

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与任何你想返回的东西,你说Answerthen一套参数。

+0

我试过,但它仍然进入showMessageDialog似乎无法弄清楚为什么 – user2540256

0

这么长的故事很短,除非你将它作为参数传递给方法,否则不能模拟方法调用。

它成为与范围界定问题,所以这个

public void testMethod(DefaultOptionPane optionPane) { 

     System.out.println("Entering method"); 
     System.out.println(optionPane.printAwsome()); 
     System.out.println("Exiting Method"); 
    } 

替换此

public void testMethod() { 
     DefaultOptionPane optionPane = new DefaultOptionPane(); 
     System.out.println("Entering method"); 
     optionPane.printAwsome(); 
     System.out.println("Exiting Method"); 
     } 

,然后你可以嘲笑optionPane

+0

不,我不认为你是嘲笑任何东西仍然在这段代码。 – nullpointer

+0

我用ExcelSupportTest.java代替了gist链接,其中我嘲笑了optionPane.printAwsome()。 – user2540256

+0

我将代码更改为更简单的代码,以避免不必要的细节 – user2540256