SpringBoot+SpringMVC+JPA创建单元测试

作者: 字伯约 | 来源:发表于2017-02-10 15:30 被阅读0次

阅读本文前,请先基于SpringBoot+JPA创建一个web项目,参考文章

前言

单元测试在保障软件产品质量上,有非常重要的作用,它可以重复使用,迭代验证代码的正确性。我们的项目是一直在演化的,如何保障过去写过的代码的正确性呢,比如某次迭代,修改了某处代码,但是开发人员并不能保障这次修改的影响范围,只能从感官上认为,对哪里哪里有影响,然后测试想到的部分代码。如果你的项目所有代码都有单元测试,项目整体有集成测试,每次部署前都执行“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

相关文章

网友评论

    本文标题:SpringBoot+SpringMVC+JPA创建单元测试

    本文链接:https://www.haomeiwen.com/subject/bypgittx.html