Код: Выделить всё
public class HandlerAbstract {
protected String getUserName(NativeWebRequest request, @Valid RequestBodyOptions requestBodyOptions) throws HandlerException {
String requestBodyOptionsUserName = null;
String requestParameterUserName = request.getParameter("username");
if (requestBodyOptions != null) {
requestBodyOptionsUserName = requestBodyOptions.getUserName();
}
if (requestBodyOptionsUserName != null && requestParameterUserName == null) {
return requestBodyOptionsUserName;
} else if (requestBodyOptionsUserName == null && requestParameterUserName != null) {
return requestParameterUserName;
} else if (requestBodyOptionsUserName != null && requestParameterUserName != null && !(requestBodyOptionsUserName.equals(requestBodyOptionsUserName))) {
throw new HandlerException("The username passed in the request body and the request parameters are not the same.");
} else if (requestBodyOptionsUserName != null && requestParameterUserName != null && requestBodyOptionsUserName.equals(requestBodyOptionsUserName)) {
return requestBodyOptionsUserName;
}else{
return null;
}
}
}
Код: Выделить всё
@Test
public void testUserNameBody(){
HashMap parameters = new HashMap();
NativeWebRequest mockRequest = getNativeWebRequest(parameters);
RequestBodyOptions requestBodyOptions = new RequestBodyOptions();
requestBodyOptions.setUserName("user-name");
HandlerAbstract handlerImplementation = new HandlerImplementation();
String userName = handlerImplementation.getUserName(mockRequest, options);
Assertions.assertEquals("user-name", userName);
}
@Test
public void testUserNameRequestParameter(){
HashMap parameters = new HashMap();
parameters.put("username", "user-name");
NativeWebRequest mockRequest = getNativeWebRequest(parameters);
RequestBodyOptions requestBodyOptions = new RequestBodyOptions();
HandlerAbstract handlerImplementation = new HandlerImplementation();
String userName = handlerImplementation.getUserName(mockRequest, options);
Assertions.assertEquals("user-name", userName);
}
@Test
public void testUserName2DifferentValues(){
HashMap parameters = new HashMap();
parameters.put("username", "user-name");
NativeWebRequest mockRequest = getNativeWebRequest(parameters);
RequestBodyOptions requestBodyOptions = new RequestBodyOptions();
requestBodyOptions.setUserName("somethingelse");
try{
HandlerAbstract handlerImplementation = new HandlerImplementation();
String tokenSecret = handlerImplementation.getUserName(mockRequest, options);
Assertions.fail("Should have thrown an exception but did not throw any exception");
}catch (HandlerException e){
Assertions.assertEquals("The username passed in the request body and the request parameters are not the same.", e.getMessage());
}catch (Exception e){
Assertions.fail("Should have thrown a HandlerException but threw: " + e.getMessage());
}
}
@Test
public void testUserNameEqualValues(){
HashMap parameters = new HashMap();
parameters.put("username", "user-name");
NativeWebRequest mockRequest = getNativeWebRequest(parameters);
RequestBodyOptions requestBodyOptions = new RequestBodyOptions();
requestBodyOptions.setUserName("user-name");
HandlerAbstract handlerImplementation = new HandlerImplementation();
String userName = handlerImplementation.getUserName(mockRequest, options);
Assertions.assertEquals("user-name", userName);
}
Если я добавляю журнал или исключение в разные точки, где он должен возвращать значение, он выдается/записывается во время работы. тесты. То же самое, если я запущу его с покрытием кода Intelij. Если я запускаю эти тесты с отладкой, все строки будут покрыты.
Сначала я думал, что это из-за использования Mockito, но поэтому я создал NativeWebRequest вот так, но он не решается это:
Код: Выделить всё
private NativeWebRequest getNativeWebRequest(HashMap parameters){
MockHttpServletRequest httpRequest = new MockHttpServletRequest();
// Add parameters to the request
parameters.forEach((key, value) -> {
httpRequest.addParameter(key, value);
});
NativeWebRequest nativeWebRequest = new ServletWebRequest(httpRequest);
return nativeWebRequest;
}
- Затем я попытался явно установить для параметра запроса значение null в запросе или в параметрах тела запроса, но это также не помогло.
- Я создал новую конкретную реализацию абстрактного класса в тесте, так как думал, что, возможно, именно здесь Жакоко запутался, но это не помогло. >
- Я дважды проверил, правильно ли настроен мой плагин Surefire и это. Тесты, которые я хочу использовать для улучшения тестового покрытия, выполняются (https://stackoverflow.com/a/67220369/12171869).
- Я работаю над многомодульным проектом с модуль для интеграционных тестов. Я исключил покрытие интеграционного теста из создания отчета jacoco, полагая, что проблема связана с созданием агрегированного отчета. Однако метод остается не полностью раскрытым.
Подробнее здесь: https://stackoverflow.com/questions/792 ... t-coverage