J'écris un test pour RequestContextHolder
. J'ai réussi les tests, mais après avoir été refactorisé, j'ai obtenu NullPointerException, mais je n'arrive pas à comprendre pourquoi.Le test Java Spring RequestContext lève NullPointerException même avec MockHttpServletRequest
Voici le code.
String processorName = "<UNKNOWN>".intern();
Optional<HttpServletRequest> request = Optional.of(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest());
String procName = (String) request.get().getAttribute(CONTROLLER_NAME);
if (!Strings.isEmpty(procName)) {
processorName = procName;
}
return processorName;
Et voici mes tests
@Test
public void testProcessorName() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setAttribute(CONTROLLER_NAME, "default");
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
String processorName = halUtils.processorName();
assertEquals("default", processorName);
}
@Test
public void testProcessorNameWithoutAttribute() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
String processorName = halUtils.processorName();
assertEquals("<UNKNOWN>", processorName);
}
@Test
public void testProcessorNameWithoutRequest() throws Exception {
String processorName = halUtils.processorName();
assertEquals("<UNKNOWN>", processorName);
}
Je refactorisé être une seule ligne, mais je suis arrivé à la place NullPointerException.
public String processorName() {
return Optional.of(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getAttribute(CONTROLLER_NAME)).orElse("<UNKNOWN>".intern()).toString();
}