spring test教程

代码覆盖率 = 被测代码行数 / 参测代码总行数 * 100%。java

行覆盖 它又被称做语句覆盖或基本块覆盖。这是一种较为经常使用且具备表明性的指标,度量的是被测代码中每一个可执行语句是否被执行到。
条件覆盖 它度量的是当代码中存在分支时,是否能覆盖进入分支和不进入分支这两种状况。这要求开发人员编写多个测试用例以分别知足进入分支与不进入分支这两种状况。
路径覆盖 它度量的是当代码中存在多个分支时,是否覆盖到分支之间不一样组合方式所产生的所有路径。这是一种力度最强的覆盖检测,相对而言,条件覆盖只是路径覆盖中的一部分。web

在这三种覆盖指标中,行覆盖简单,适用性广,但可能会被认为是“最弱的覆盖”,其实否则。行覆盖相对于条件或路径覆盖,能够使开发人员经过尽量少的测试数据和用例,覆盖尽量多的代码。一般状况下,是先经过工具检测一遍整个工程单元测试的行覆盖状况,而后针对没有被覆盖到的代码,分析其没有被覆盖到的缘由。若是是因为该代码所在分支因为不知足进入该分支的条件而没有被覆盖,那么开发人员才会进一步修改或增长测试代码,完成该部分的条件或路径覆盖。spring

@RunWith:用于指定junit运行环境,是junit提供给其余框架测试环境接口扩展,为了便于使用spring的依赖注入,spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner做为Junit测试环境数据库

@ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/applicationContext-service.xml"}) 导入配置文件,这里个人applicationContext配置文件是根据模块来分类的。若是有多个模块就引入多个“applicationContext-service.xml”文件。若是全部的都是写在“applicationContext。xml”中则这样导入:
@ContextConfiguration(locations = "classpath:applicationContext.xml")spring-mvc

@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样作操做的数据才不会污染数据库!
@Transactional:这个很是关键,若是不加入这个注解配置,事务控制就会彻底失效!mvc

整个测试过程很是有规律:
一、准备测试环境
二、经过MockMvc执行请求
3.一、添加验证断言
3.二、添加结果处理器
3.三、获得MvcResult进行自定义断言/进行下一步的异步请求
四、卸载测试环境app

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-mvc.xml","classpath:spring-context*.xml"})
@WebAppConfiguration
@Autowired
    private WebApplicationContext wac;
    private MockMvc mockMvc;


    @Before
    public void setUp() throws Exception {
        mockMvc =  MockMvcBuilders.webAppContextSetup(wac).build();
    }
    @Test
    public void testHome() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("Hello World!")));
    }
相关文章
相关标签/搜索