2015-11-19 79 views
2

我基本上有一个使用接口来调用包含成员的其他类的主类。我应该模拟这个(具体的)主类用来调用其他类的接口。这样做的目的是为这些其他类实现一个模拟的getMember()方法,这会很麻烦。现在,我们只需要确保主类的行为与预期相同,只要getMember()方法返回一定的返回值即可。具有mockito的具体类所使用的模拟接口

我现在看到这种可能的唯一方法是通过传递实现这些接口的类的模拟实例。

如果这看起来像一个愚蠢的问题,我很抱歉,但我只是通过阅读这份作业,文档或通过搜索引擎找不到我的问题的答案。

+0

有没有问题? – Manu

+3

您正在尝试测试的代码的一个最小示例在这里会有所帮助 –

+0

您的方案似乎在嘲笑@guilhermerama指出的私有字段,并且可能的解决方案在以下链接中给出:http://stackoverflow.com/问题/ 19521220 /嘲笑 - 假设存在的私人变量 – IzCe

回答

1

它是您的主类创建其依赖项的实例(实现您提到的那些接口)? 如果可能,最好更改主类以遵循依赖注入模式。然后,您将通过构造函数或setter方法为主类提供依赖关系。这些依赖关系可能是模拟测试或生产代码中的真实实现。

修改了guilhermerama的例子。

YourMainClass yourMain = new YourMainClass(anInterfaceMock); 
+0

的确,这是我展示的解决方案所需要的。当没有任何东西被当作参数时,Mockito不能注入模拟。 – Skeleton

3

试试这个:

AnInterface anInterfaceMock = Mockito.mock(AnInterface.class); 

    //Set your properties here if you want return an specific object. 
    Member member = new Member(); 

    Mockito.when(anInterfaceMock.getMember()).thenReturn(member); 

    YourMainClass yourMain = new YourMainClass(); 

    yourMain.setAnInterfaceMock(anInterfaceMock); 

    yourMain.testMethod(); // call the method you wan to test. This method internal implementation is supposed to call anInterfaceMock.getMember() 

    Mockito.verify(anInterfaceMock).getMember(); 

UPDATE: 约不具有主类的方式来强制选择界面嘲笑信息后,它似乎是一个工作PowerMockito。但是发布主要类的代码会有很大帮助。