我是 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/