[英]Java Spring RequestContext test throws NullPointerException even with MockHttpServletRequest
我正在為RequestContextHolder
編寫測試。 我通過了測試,但是在重構之后我得到了NullPointerException,但不知道為什么。
這是代碼。
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;
這是我的測試
@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);
}
然后我將其重構為一個襯板,但是卻得到了NullPointerException。
public String processorName() {
return Optional.of(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getAttribute(CONTROLLER_NAME)).orElse("<UNKNOWN>".intern()).toString();
}
您基本上在做什么:
return Optional.of(null).orElse("<UNKNOWN>".intern()).toString();
這樣做將為您提供NullPointerException,因為getAttribute(CONTROLLER_NAME)
的返回為null,而Optional.of(..)
不接受null參數,而在原始代碼中,您正在使用Strings.isEmpty(..)
測試其值Strings.isEmpty(..)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.