繁体   English   中英

如何捕获或验证传递给私有方法的参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM