java - 如何从 requestContext.abortwith() 方法获取响应

标签 java spring-mvc junit mockito

Class Permission implements ContainerRequestContext
{

    @context
    HttpServletRequest servletRequest;

    public void filter(ContainerRequestContext containerRequestContext) throws IOException 
    {
        String Path=servletRequest.getPathInfo;

        int id=containerRequestContext.getId;

        if(id==null){
            containerRequestContext.abortWith(new ServerResponse(ExceptionUtil.getErrorMessageObject(...),errorCode,new Header<Object>()));
        }
    }
}

出于测试目的,

当我们设置 id=null 时,如何获取 ServerResponse 对象中设置的 errorCode

 @RunWith(MockitoJUnitRunner.class)
    class Test {

  @InjectMocks
  private Permission permission;
  @Mock
  private HttpServletRequest servletRequest;
  @Mock
  private ContainerRequestContext containerRequestContext;

  @Test
  public void test()
  {
      when(servletRequest.getPathInfo()).thenReturn("/getid");
      when(containerRequestContext.getId()).thenReturn(null);
      permission.filter(containerRequestContext);

      Response r = //Need the code. How to get the Response that i have set on permission class when id=null so that i can fetch the errorCode from that.
  //With that erroCode i can write my test methods.
  }
}

最佳答案

您需要的是一个ArgumentCaptor:

ArgumentCaptor<Response> argumentCaptor = ArgumentCaptor.forClass(Response.class);
verify(containerRequestContext).abortWith( argumentCaptor.capture() );

这会检查方法 abortWith 是否已被调用一次(曾经是 verify 的默认值),并将调用该方法的参数存储在 ArgumentCaptor,您可以通过以下方式获取它:

Response response = argumentCaptor.getValue();

有关更多详细信息,请参阅 JavaDoc .

当然,还有其他方法(例如,您可以使用Answer),但它们并不那么容易。

关于java - 如何从 requestContext.abortwith() 方法获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087419/

相关文章:

java - 如何为没有源代码的类生成 JavaDoc 文档?

java - 在 JUNIT 测试中未创建 Hibernate 事务

java - 如何从 selenium rc 生成结果

spring - import org.springframework.web.bind.annotation.RestController 无法解析

java - 用于 DAO JUnit 测试的 SpringBootTest

java - 如何返回java中元素的当前索引?

java - 在 Java Card 上使用椭圆曲线计算的点加法

java - 使用 cn1 库刷新库时出错

java - 如何在spring-mvc中将参数传递给重定向页面

java - spring-boot-starter-parent 在 pom 文件中到底做了什么?