[英]How to capture or verify the argument passed to a private method?
问题:我无法验证或捕获传递给我的被测系统的私有方法的参数。
例如:
public class FooManagedBean{
public void persistFooEntity(){
Response response = new Response();
response.addResponse(checkFirstConstrain);
response.addResponse(checkSecondConstrain(response));
if(response.hasNoErros){
persistFoo();
}enter code here
}
private Response checkFirstConstrain(){
Response response = new Response();
if(//checking Constrain){
return //Response with Error
}
return //Response without Error
}
private Response checkSecondConstrain(Response response){
//some Code
}
}
首先,我尝试使用 Mockito.verify() 检查传递的方法checkSecondConstrain的响应,这会引发错误,因为您只能将它用于模拟实例。 其次,我使用 ArgumentCaptor 进行了尝试,以捕获传递的Response 。 但是在这里我们遇到了同样的问题,因为要捕获传递的参数,您必须使用 Mockito.verify()。
问题:有没有办法捕获或验证传递给被测系统的私有方法的参数? 我想要将变量的 state 传递给方法。
另一个问题:是否可以验证被测系统的方法是被调用还是从未被调用?
注意:FooManagedBean 是被测系统。
系统:Java 8、Mockito 1.9.5
我会将约束检查部分移动到单独的 class 并公开方法。 这样,您可以传递“ConstraintChecker”模拟并验证您想要的任何内容。
public class ConstraintChecker {
public Response checkFirstConstraint() {
// ...
return new Response();
}
public Response checkSecondResponse() {
// ...
return new Response();
}
}
然后您可以将其传递到您的 foo-managed-bean 中:
public class FooManagedBean {
private final ConstraintChecker constraintChecker;
public FooManagedBean(ConstraintChecker constraintChecker) {
this.constraintChecker = constraintChecker;
}
public void persistFooEntity() {
Response response = new Response();
response.addResponse(constraintChecker.checkFirstConstraint());
respones.addResponse(constraintChecker.checkSecondConstraint(response));
if (response.hasNoErrors()) {
persistFoo();
}
}
}
在你的测试中:
@Test
public void testFoo() {
ConstraintChecker constraintChecker = Mockito.mock(ConstraintChecker.class);
FooManagedBean bean = FooManagedBean(constraintChecker);
Mockito.when(constraintChecker.checkFirstConstraint()).thenReturn(new Response());
Mockito.when(constraintChecker.checkSecondResponse()).thenReturn(new Response());
bean.persistFooEntity();
Mockito.verify(constraintChecker).checkFirstConstraint();
Mockito.verify(constraintChecker).checkSecondResponse();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.