我正在测试一个类中的方法,该方法又调用另一个工件'方法并消耗其中的返回值。
public void methodToTest()
{
Object reply = artifactObj.anotherMethod(object);
if(reply == null)
return;
Object =reply.getData();
}
我使用过powermockito并且知道如果"另一个方法"在同一个班级里面我可以很容易地发现它。但是当方法不在同一个班级时,我不确定怎么能这样做。
我的尝试 - :
Object mockObject = mock(Object.class);
Object mockReply = mock(Object.class);
Mockito.when(artifactObj.anotherMethod(mockObject)).thenReturn(mockReply);
//Now call original test method
Class c = new Class(artifactObj);
c.methodToTest();
执行上述操作将始终在我尝试测试的原始方法中返回reply = null。我需要返回一些回复值,以便我可以在我的方法中使用它。
答案 0 :(得分:2)
Null ,因为永远不会调用mocked方法:
在您的示例模拟中,您将 mockObject 作为匹配器传递,因此仅当使用相同的 mockObject 调用所述方法时,才会返回模拟响应参数。你应该做的是引入一个匹配器而不是它。
在下面的示例中,使用了Matchers.any(OriginalArgumentClass.class),它所做的是使用任何对象作为参数匹配对方法的任何调用,并返回模拟回复。
Object reply = new Object();
ArtifactClass artifactObjMock = Mockito.mock(ArtifactClass.class);
Mockito.when(artifactObjMock.anotherMethod(Matchers.any(OriginalArgumentClass.class))).thenReturn(reply);
现在将 artifactObjMock 传递给构造函数调用:
Class c = new Class(artifactObjMock);
c.methodToTest();
这可以假设你在构造函数中将传递的值赋给 artifactObj 字段。