这样的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()
方法:
- 没有人可以保证代码会保持不变。如果您或其他开发人员将不得不重构或更改您的代码,
你将能够安全地完成它,因为你将通过测试检查正确性,
否则开发人员可能会无意中破坏某些东西。
- 当你写测试的时候,你实际上是在考虑一个好的设计,
没有测试,你的结局会很糟糕。你自己提一下:
which makes me wonder about the method design
至于测试工作 - 这意味着您的测试设计不佳 类,您必须重构并保持它们(测试)像主代码一样清晰。
您可以在 question.
中阅读更多为什么必须进行测试以及测试如此重要的原因
我在 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()
方法:
- 没有人可以保证代码会保持不变。如果您或其他开发人员将不得不重构或更改您的代码, 你将能够安全地完成它,因为你将通过测试检查正确性, 否则开发人员可能会无意中破坏某些东西。
- 当你写测试的时候,你实际上是在考虑一个好的设计, 没有测试,你的结局会很糟糕。你自己提一下:
which makes me wonder about the method design
至于测试工作 - 这意味着您的测试设计不佳 类,您必须重构并保持它们(测试)像主代码一样清晰。
您可以在 question.
中阅读更多为什么必须进行测试以及测试如此重要的原因