我本质上有一个主类,它使用接口来调用包含成员的其他类。我应该模拟这个(具体的)主类用来调用其他类的接口。这样做的目的是为其他实现起来很麻烦的类创建一个模拟的getMember()方法。目前,我们只需要确保主类的行为符合预期,给定getMember()方法的某些返回值。
我现在认为这是可能的唯一方法是传递实现这些接口的类的模拟实例。
如果这似乎是一个愚蠢的问题,我很抱歉,但我只是无法通过阅读本作业、文档或搜索引擎找到问题的答案。
试试这个:
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();
更新:在得知主类无法强制所选接口进行mock的信息后,这似乎是PowerMockito的一项工作。但是发布你的主类代码会有很大帮助。
是您的主类创建其依赖项的实例(实现您提到的接口)吗?如果可能的话,最好将主类更改为遵循依赖注入模式。然后,您将通过构造函数或setter提供我们的主类及其依赖项。这些依赖关系可以是用于测试的模拟,也可以是生产代码中的真实实现。
稍微修改一下guilhermerama的例子。
YourMainClass yourMain = new YourMainClass(anInterfaceMock);