如何使用 mockito/powermockito 模拟内部方法调用
how to mock internal method call using mockito/powermockito
我正在测试 class 中的一个方法,它会调用另一个工件的方法并消耗其中的 return 值。
public void methodToTest()
{
Object reply = artifactObj.anotherMethod(object);
if(reply == null)
return;
Object =reply.getData();
}
我使用过 powermockito 并且知道如果 "anotherMethod" 存在于同一个 class 中,我可以很容易地监视它。但是我不确定当方法不在同一 class.
中时我该如何做
我的尝试-:
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();
以上操作将始终 return 在我尝试测试的原始方法中回复 = null。我需要回复的一些值 returned 以便我可以在我的方法中使用它。
Null 被 returned 因为永远不会调用模拟方法:
在您的示例中,当您进行模拟时,您将 mockObject 作为匹配器传递,因此当使用相同的方式调用所述方法时,模拟响应仅 returned mockObject 作为参数。你应该做的是引入一个匹配器而不是它。
在下面的示例中使用了 Matchers.any(OriginalArgumentClass.class),它所做的是匹配对使用任何对象作为参数的方法的任何调用,并且return 嘲笑回复。
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 字段。
我正在测试 class 中的一个方法,它会调用另一个工件的方法并消耗其中的 return 值。
public void methodToTest()
{
Object reply = artifactObj.anotherMethod(object);
if(reply == null)
return;
Object =reply.getData();
}
我使用过 powermockito 并且知道如果 "anotherMethod" 存在于同一个 class 中,我可以很容易地监视它。但是我不确定当方法不在同一 class.
中时我该如何做我的尝试-:
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();
以上操作将始终 return 在我尝试测试的原始方法中回复 = null。我需要回复的一些值 returned 以便我可以在我的方法中使用它。
Null 被 returned 因为永远不会调用模拟方法:
在您的示例中,当您进行模拟时,您将 mockObject 作为匹配器传递,因此当使用相同的方式调用所述方法时,模拟响应仅 returned mockObject 作为参数。你应该做的是引入一个匹配器而不是它。
在下面的示例中使用了 Matchers.any(OriginalArgumentClass.class),它所做的是匹配对使用任何对象作为参数的方法的任何调用,并且return 嘲笑回复。
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 字段。