簡體   English   中英

Java Spring RequestContext測試即使使用MockHttpServletRequest也會引發NullPointerException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM