Mockito:参数的模拟服务抛出空指针异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mockito:参数的模拟服务抛出空指针异常相关的知识,希望对你有一定的参考价值。
有这个控制器方法来测试
@RequestMapping("/search/{q}")
public String getWeatherForSearchTerm(@PathVariable String q, Model model) {
GeocodingResult geocodingResult = geocodingService.findBySearchTerm(q);
Weather weather = weatherService.findByLocation(geocodingResult.getGeometry().getLocation());
model.addAttribute("geocodingResult",geocodingResult);
model.addAttribute("weather",weather);
return "weather/detail";
}
试图运行此测试
@Test
public void getWeatherForSearchTermTest() throws Exception{
GeocodingResult geocodingResult = new GeocodingResult();
Weather weather = new Weather();
Mockito.when(geocodingService.findBySearchTerm("13")).thenReturn(geocodingResult);
Mockito.when(weatherService.findByLocation(any(Location.class))).thenReturn(weather);
mockMvc.perform(get("/search/13"))
.andExpect(MockMvcResultMatchers.view()
.name("weather/detail"));
Mockito.verify(geocodingService).findBySearchTerm(any(String.class));
}
我在尝试在Controller中执行此代码行时收到NullPointerException
Weather weather = weatherService.findByLocation(geocodingResult.getGeometry().getLocation());
即使
Mockito.when(weatherService.findByLocation(any(Location.class))).thenReturn(weather);
被定义为。
调试后我意识到这是抛出异常的部分。
geocodingResult.getGeometry().getLocation()
我不明白为什么如果我在代码片段代码上模拟了如上所示的响应,就会发生这种情况。
我的班级注释了
@RunWith(MockitoJUnitRunner.class)
并定义了成员类:
private MockMvc mockMvc;
@InjectMocks
private WeatherController controller;
@Mock
private WeatherService weatherService;
@Mock
private GeocodingService geocodingService;
答案
嘲笑没有错。问题是,你正在返回一个GeocodingResult
的浅物。 GeocodingResult的基础属性(如geometry
)未明确设置,因此它们必须已初始化为null。
你需要做点什么
@Test
public void getWeatherForSearchTermTest() throws Exception {
Geometry geometry = new Geometry();
// Assuming location is string
geometry.setLocation("Mars");
GeocodingResult geocodingResult = new GeocodingResult();
geocodingResult.setGeometry(geometry);
// remaining code here
}
以上是关于Mockito:参数的模拟服务抛出空指针异常的主要内容,如果未能解决你的问题,请参考以下文章
称为验证的 Mockito Kotlin 单元测试方法抛出空指针异常