我正在尝试使用 mockito 测试我的 springboot 服务,但从我的模拟服务中获得空响应 代码编译,服务也运行良好,但测试用例失败,因为模拟服务返回 null。
服务类
@RestController
@RequestMapping(path = "/my-tracker")
public class MyTrackerController {
private static final Logger logger = LoggerFactory.getLogger(MyTrackerController .class);
@Autowired
private TrackerService trackerService;
@RequestMapping(value = "/track/{id}", method = RequestMethod.GET, produces = "application/json")
public String getTrackerDetails(@PathVariable("id") String id)
{
String response = trackerservice.track(id); // <= this is returning null
return response;
}
}
测试类
@RunWith(SpringRunner.class)
@WebMvcTest(value = MyTrackerController.class)
public class MyTrackerControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private TrackerService trackerService ;
@Test
public void getTrackerDetailsTest() throws Exception {
String response= "MyLocation";
Mockito.when(
trackerService.track(
Mockito.anyString())).thenReturn(response);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
"/my-tracker/track/123").accept(
MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
System.out.println(result.getResponse());
JSONAssert.assertEquals(response, result.getResponse()
.getContentAsString(), true);
}
}
任何帮助/建议都非常感谢。 使用的弹簧引导版本:2.3.0.发布。
博客参考编写测试用例:https://www.springboottutorial.com/unit-testing-for-spring-boot-rest-services
p.s. :我能够从上面的博客代码成功运行测试用例,但我的模拟服务返回 null。除了弹簧启动启动网和弹簧启动启动器测试之外,也没有添加额外的罐子
我可以想到的一个原因:
根据getTrackerDetails的RequestMapping,JSON字符串预计将作为响应返回(产生=application/json(
尝试在测试用例中返回有效的 JSON 作为响应。
例:
String response = ""field":"value"";