阅读本文前,请先基于SpringBoot+JPA创建一个web项目,参考文章
- SpringBoot 创建web项目,并部署到外部Tomcat http://www.jianshu.com/p/cb865f947717
- SpringBoot使用JPA,创建web服务 http://www.jianshu.com/p/157eb1ab8524
前言
单元测试在保障软件产品质量上,有非常重要的作用,它可以重复使用,迭代验证代码的正确性。我们的项目是一直在演化的,如何保障过去写过的代码的正确性呢,比如某次迭代,修改了某处代码,但是开发人员并不能保障这次修改的影响范围,只能从感官上认为,对哪里哪里有影响,然后测试想到的部分代码。如果你的项目所有代码都有单元测试,项目整体有集成测试,每次部署前都执行“mvn clean install”,那么你就能把所有代码测试一遍,在心里也有个底,至少我这次修改这些单元测试都能通过,不会犯比较明显的bug。当然单元测试会花费开发人员的一点时间,大部分中小公司基本上不会做单元测试,因为开发的工作已经占据了每天所有的时间,何况还要经常加班,这个大家都懂的。
技术框架
- SpringBoot
- Spring Data JPA
- Maven
- Tomcat8
开发过程
在前面的文章中,我们创建了PersonRespository和PersonController,下面就针对这两个类创建单元测试
1.在src/test/java下创建PersonRespositoryUnitTest.java
@RunWith(SpringRunner.class)
@DataJpaTest
public class PersonRespositoryUnitTest {
@Autowired|
private TestEntityManager entityManager;
@Autowired
private PersonRespository personRespository;
@Test
public void findByName() {
this.entityManager.persist(new Person("abc", 22));
Person person = this.personRespository.findByName("abc");
assertEquats(person.getName(), "abc");
assertEquats(person.getAge(), 22);
}
}
2.在src/test/java下创建PersonControllerUnitTest.java,这里要注意导入两个静态的方法
view()和status()
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
public class PersonControlllerUnitTest {
private MockMvc mvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp(){
mvc = McokMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void testPersonController() throws Exception {
RequestBuilder request = null;
MvcResult result = null;
request = MockMvcRequestBuilders.get("/person/add");
result = mvc.perform(request).andExpect(status().isOK()).andExpect(MockMvcResultMatchers.view().name("forward:/person/list")).andReturn();
Assert.assertNotNull(result);
request = MockMvcRequestBuilders.get("/person/list");
mvc.perform(request).andExpect(status().isOK()).andExpect(MockMvcResultMatchers.view().name("forward:/person/list")).andReturn();
Assert.assertNotNull(result);
}
}
3.测试方式,直接在单元测试类右键Run as Junit Test或者在项目目录下运行mvn clean install