在junit中模拟亚马逊Web服务请求/响应对象

塔莎·德什潘德

我在AWS(Amazon Web Service),mockito和Java junit4环境中工作。在我的课堂上,我使用一种将Request对象作为参数的方法,并根据该对象获得响应。以下是我的代码,

private Response<String> getStringResponse(Request<?> request) {
        try {
            AmazonHttpClient client = new AmazonHttpClient(new ClientConfiguration());
            ExecutionContext executionContext = new ExecutionContext(true);
            HttpResponseHandler<AmazonClientException> handler = getErrorResponseHandler();
            HttpResponseHandler<String> responseHandler = getHttpResponseHandler();
            RequestExecutionBuilder requestExecutionBuilder = client.requestExecutionBuilder();
            requestExecutionBuilder = requestExecutionBuilder.executionContext(executionContext);
            requestExecutionBuilder = requestExecutionBuilder.request(request);
            requestExecutionBuilder = requestExecutionBuilder.errorResponseHandler(handler);
            Response<String> response = requestExecutionBuilder.execute(responseHandler);
            return response;
        } catch (Exception e) {
            AppLogger.getLogger().error("Exception in :: classname :: getStringResponse() ::");
            throw e;
        }
    }

我想做的是,我想模拟整个场景,这意味着在任何请求下,无论请求是什么,我的方法都应为我提供所需的自定义响应对象。我从我的junit测试中调用此方法。那么有什么可以做的吗?

广阮

在使用JUnit和Mockito测试此方法之前,应编写干净且可测试的代码重要的是,您必须删除方法内部的所有依赖关系,并从外部对其进行初始化。例如,

 private Response<String> getStringResponse(Request<?> request,
      AmazonHttpClient client,
      ExecutionContext executionContext,
      HttpResponseHandler<AmazonClientException> handler,
      HttpResponseHandler<String> responseHandler) {
    try {
      RequestExecutionBuilder requestExecutionBuilder = client.requestExecutionBuilder()
          .executionContext(executionContext)
          .request(request)
          .errorResponseHandler(handler);
      Response<String> response = requestExecutionBuilder.execute(responseHandler);
      return response;
    } catch (Exception e) {
      AppLogger.getLogger().error("Exception in :: classname :: getStringResponse() ::");
      throw e;
    }
  }

现在,您可以通过模拟上述依赖性来对其进行测试。

  @Mock
  AmazonHttpClient client;
  @Mock
  ExecutionContext executionContext;
  @Mock
  HttpResponseHandler<AmazonClientException> handler;
  @Mock    
  HttpResponseHandler<String> responseHandler;

  // For request, you can create a custom one or use mock data
  Request<?> request;

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
    // other setups
  }

  @Test
  public void getStringResponseTest() {
    // you can test now
    yourCall.getStringResponse(request, client, executionContext, handler, responseHandler);
    // verify whatever you want....
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章