这样的class应该测试吗? (已测试功能的聚合)

Should such a class be tested? (aggregation of already tested functions)

我在 Class A 中有以下代码,其中 requestService.createGetSessionRequest()httpService.sendAsyncAndReceive() 已经在其他单元测试中进行了测试:

public GetSessionResponse createSession(String endpointBaseUrl, String endpointId, String salt, String endpointSecret) throws JsonProcessingException, ExecutionException, InterruptedException, HttpException {
    final HttpRequest request = requestService.createGetSessionRequest(endpointBaseUrl,endpointId,salt,endpointSecret);
    final GetSessionResponse response = httpService.sendAsyncAndReceive(request, GetSessionResponse.class);
    return response;
}

我在想,我是否应该为 A.createSession() 创建测试?

基本上它似乎很有用,因为开发人员在 A.createSession() 的实现中调用 requestService.createGetSessionRequest() 时可能会不小心混淆参数,因为它们都是字符串。

另一方面,测试的工作量似乎相当大,这让我对方法设计感到疑惑(只是将多个调用聚合到一个方法中,以便为用户提供更简洁的界面)

示例测试用例如下所示:

void createSessionSuccessfullyTest() throws HttpException, ExecutionException, InterruptedException, JsonProcessingException {
    String endpointBaseUrl = "http://te.st";
    String endpointId = "abc";
    String salt = "salt";
    String endpointSecretHash = "hash";
    HttpRequest request = requestService.createGetSessionRequest(endpointBaseUrl,endpointId,salt,endpointSecretHash);
    String endpoint_session_id = "0TbKHn9MsZKJYhfQ0FZ0W2y0RHVwxTOY";
    GetSessionResponse expected = new GetSessionResponse();
    expected.setEndpointSessionId(endpoint_session_id);
    HttpService httpService = mock(HttpService.class);
    when(httpService.sendAsyncAndReceive(request, GetSessionResponse.class)).thenReturn(expected);
    AuthenticationFlow authenticationFlow = new AuthenticationFlowImpl(requestService,httpService);
    GetSessionResponse actual = authenticationFlow.createSession(endpointBaseUrl,endpointId,salt,endpointSecretHash);
    assertThat(actual).usingRecursiveComparison().isEqualTo(expected);
}

是的。您肯定必须测试 A.createSession() 方法:

  1. 没有人可以保证代码会保持不变。如果您或其他开发人员将不得不重构或更改您的代码, 你将能够安全地完成它,因为你将通过测试检查正确性, 否则开发人员可能会无意中破坏某些东西。
  2. 当你写测试的时候,你实际上是在考虑一个好的设计, 没有测试,你的结局会很糟糕。你自己提一下:

which makes me wonder about the method design

至于测试工作 - 这意味着您的测试设计不佳 类,您必须重构并保持它们(测试)像主代码一样清晰。

您可以在 question.

中阅读更多为什么必须进行测试以及测试如此重要的原因