spring-boot - Spring Boot 单元测试端点 NullPointerException - 以及如何达到 100% 的覆盖率
问题描述
我是 Spring Boot 测试的新手,我正在尝试测试和端点。按照教程,我这样做了:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SpringMiddlewareApplication.class)
@ComponentScan("com.springmiddleware")
@SpringBootTest
public class SpringMiddlewareApplicationTests {
private MockMvc mvc;
@Test
public void returnsString() {
try {
this.mvc.perform(get("/home")).andExpect(status().isOk())
.andExpect(content().string(containsString("You are in the home page")));
} catch (Exception e) {
e.printStackTrace();
}
}
如果我运行测试它通过,但控制台中显示以下错误:
java.lang.NullPointerException
at com.example.demo.SpringMiddlewareApplicationTests.returnsString
RestController 类如下:
@RestController
public class FirstController {
/**
* Welcome page
*
* @return String
*/
@GetMapping("/home")
public String homePage() {
return "You are in the home page";
}
是什么导致错误?
此外,即使此测试通过,运行 Jacoco 我也没有覆盖方法“homePage”。我如何实现这一目标?
解决方案
您的对象 mvc 为空!您的测试类必须如下所示:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SpringMiddlewareApplication.class)
@ComponentScan("com.springmiddleware")
@SpringBootTest
public class SpringMiddlewareApplicationTests {
private MockMvc mvc;
@Autowired
private FirstController firstController;
@Before
public void init() {
mvc = MockMvcBuilders.standaloneSetup(firstController)
.addPlaceholderValue("server.servlet.context-path", "example").build();
}
@Test
public void returnsString() {
try {
this.mvc.perform(get("/home")).andExpect(status().isOk())
.andExpect(content().string(containsString("You are in the home page")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
推荐阅读
- angular - 无法使用 Selenium 找到并单击按钮进入 Angular 7 应用程序
- python - 如何在 attoti 的 where 条件下设置日期?
- c# - 有没有办法在 Clear() 之前不输入 Console 来使用它?
- python - Python 可以实例化一个变量并同时返回它的值或引用吗?
- node.js - ibmcloud-appid:nodejs 如何进行本地开发与在 IBM Cloud 中运行?
- android - 我在计算器末尾得到“.0”
- angular - 为什么异步管道在出错后继续发出值?
- parallel-processing - Pytorch:W ParallelNative.cpp:206
- https - 当测试通过 HTTPS 时,如何将 SSL 证书插入 bitbucket-pipelines.yml 文件?
- matlab - 如何在 MATLAB 中将 symfun 转换为字符串