Java测试驱动开发(TDD)
Java测试驱动开发(TDD)
一、基础知识
1.什么是TDD
TDD要求你先编写测试,再编码实现代码。
1.1怎么开始TDD
- 编写测试代码
- 运行测试代码
- 编写实现代码
- 运行测试代码
- 重构
- 运行测试代码
第一步,编写测试代码,然后运行测试代码,由于实现代码没有编写,所示测试执行一定是不通过的,如果通过了,那么就是有问题的就要找到问题。测试不通过才执行第二步。
第二步,编写实现代码,然后运行测试代码,此时如果测试不通过,说明实现写得有问题,需要重新修改(重写)不通过测试的实现,如果测试通过了才能执行第三步。
第三步,在实现基础上对实现进行重构优化,但不能引入新功能。重构测试不通过需要回到第二步基础上来操作。
2.测试工具
2.1 测试框架
- Junit
- TestNG
- Hamcrest
- AssertJ
2.2 代码覆盖率工具
- Jacoco
导入Jacoco插件:
apply plugin: 'jacoco'
编写测试,测试Controller:
@RunWith(SpringRunner.class)
@SpringBootTest
// 使用MockMvc自动配置
@AutoConfigureMockMvc
public class SimpleServicesPpApplicationTests {
// 注入MockMvc
@Autowired
private MockMvc mockMvc ;
// 开始对Controller测试
@Test
public void testHello() throws Exception {
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/hello/abc/fed");
mockMvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("{\"message\": \"hello abc fed\"}"));
}
}
执行Jacoco测试:
> gradle test jacocoTestReport
查看Jacoco测试报告:在项目build目录下的reports->jacoco->test->html->index.html
2.3 Web测试框架
2.3.1Selenide
@Test
public void testLogin() {
// 保持浏览器打开
Configuration.holdBrowserOpen = true;
// 打开网页 https://www.so.com/
open("https://www.so.com/");
// 设置 id为 input 的标签的value值为 哈哈
$("#input").setValue("哈哈");
// 设置id为 search-button 的标签为点击状态
$("#search-button").click();
System.out.println("----------------------");
}