java - 模拟 HttpHeaders 抛出 NullPointerException

标签 java mockito

我是 Mockito 的新手,我在 TestClass 中模拟 HttpHeaders,但如果我删除 setUp() 方法并模拟 HttpHeaders,它会抛出 NullPointerException,并且我不想在 setup() 方法中编写所有代码,我只是想要 mock HttpHeaders。有人可以建议我如何解决这个问题

测试类

    @RunWith(SpringJUnit4ClassRunner.class)
    public class ValidateAndQuotetValidatorTest {

        @InjectMocks
        private ValidateAndQuotetValidator validator;

        @Mock
        private HttpHeaders headers;

   @Before
    public void setUp() throws Exception {

        List<String> requestHeader = new ArrayList<String>();
        MultivaluedMap<String, String> requestHeaders = new MultivaluedHashMap<> ();
        headers = new HttpHeaders() {

            @Override
            public MultivaluedMap<String, String> getRequestHeaders() {
                // TODO Auto-generated method stub
                return requestHeaders;
            }

            @Override
            public List<String> getRequestHeader(String name) {
                // TODO Auto-generated method stub
                return requestHeader;
            }

            @Override
            public MediaType getMediaType() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public int getLength() {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public Locale getLanguage() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public String getHeaderString(String name) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public Date getDate() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public Map<String, Cookie> getCookies() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public List<MediaType> getAcceptableMediaTypes() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public List<Locale> getAcceptableLanguages() {
                // TODO Auto-generated method stub
                return null;
            }
        };
    }


        @Test(expected = ServiceException.class)
        public void test_validateRequest_12() throws Exception {
            headers.getRequestHeaders().putSingle(ExternalPartnerUtil.PARTNER_NAME, "");
            headers.getRequestHeaders().putSingle(ExternalPartnerUtil.AGENT_ID, "asd");
            validator.validateHeaders(headers);
        }
    }

异常

java.lang.Exception: Unexpected exception, expected<com.sampl.demo.exception.ServiceException> but was<java.lang.NullPointerException>

最佳答案

第一个可能的错误是没有使用@RunWith(MockitoJUnitRunner.class)运行器。

看看这里的例子: https://www.springboottutorial.com/spring-boot-unit-testing-and-mocking-with-mockito-and-junit

第二个是在 validator 内部可以根据 header 方法调用的结果调用某些方法。在这种情况下,您需要使用 when() 方法。例如:

when(headers.getHeader("accept")).thenReturn("application/json");

关于java - 模拟 HttpHeaders 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62284747/

相关文章:

java - 无法停止Hadoop IPC服务

java - Mockito 使用模拟对象测试 DAO

java - Powermock 无法模拟 MysqlConnect

java - 聚合计划

java - spring框架中根据实体对象调用不同的Service api

java - 多个本地化环境

java - 为什么这个空指针异常不断出现?我最后写了错误。我还提到了发生错误的行

java - Mocking Guice 提供的对象

unit-testing - mockito when() 调用是如何工作的?

java - Mockito Matchers isA、any、eq 和 same 有什么区别?