Junit单元测试
Posted zeussbook
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Junit单元测试相关的知识,希望对你有一定的参考价值。
JUnit简介
JUnit 是用于编写和运行可重复的自动化测试的开源测试框架,这样可以保证我们的代码按预期工作。JUnit 可广泛用于工业和作为支架(从命令行)或IDE(如 IDEA)内单独的 Java 程序。主要是用于后台的方法测试,避免重复的启动项目。
断言测试预期结果。
测试功能共享通用的测试数据。
测试套件轻松地组织和运行测试。
图形和文本测试运行。
JUnit 用于测试:
整个对象
对象的一部分 - 交互的方法或一些方法
几个对象之间的互动(交互)
JUnit 特点
JUnit 是用于编写和运行测试的开源框架。
提供了注释,以确定测试方法。
提供断言测试预期结果。
提供了测试运行的运行测试。
JUnit 测试让您可以更快地编写代码,提高质量
JUnit 是优雅简洁。它是不那么复杂以及不需要花费太多的时间。
JUnit 测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。
JUnit 测试可以组织成测试套件包含测试案例,甚至其他测试套件。
Junit 显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。
JUnit 注解
@BeforeClass 全局只会执行一次,而且是第一个运行
@Before 在测试方法运行之前运行
@Test 测试方法
@After 在测试方法运行之后允许
@AfterClass 全局只会执行一次,而且是最后一个运行
@Ignore 忽略此方法
@AfterClass和BeforeClass即是为了满足测试中,那些体积非常大,但只要一次初始化的代码块!
@RunWith:修改测试运行器
@Rollback(true):事务回滚,默认true
测试方法必须是静态
注意:编写测试类的原则:
①测试方法上必须使用@Test进行修饰
②测试方法必须使用public void 进行修饰,不能带任何的参数
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
④测试类所在的包名应该和被测试类所在的包名保持一致
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
⑥测试类使用Test作为类名的后缀(不是必须)
⑦测试方法使用test作为方法名的前缀(不是必须)
测试套件的使用@RunWith
测试套件就是将几个测试类放在一个入口文件中,这些类可以一起执行。这里就需要使用到@RunWith注解来修改测试运行器。
新建一个入口类SuiteTest,该类不能包含其它方法。更改测试运行器为Suite.class,然后将要一起执行的类作为数组传入到Suite.SuiteClasses()中。
junit 单元测试事务会自动回滚。通过@Rollback(true)注解来实现,默认是true,事务会回滚,可以不写。false时事务不会回滚,数据会写到数据库中。
package com.xiaolyuh.service; import java.util.Date; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; import com.xiaolyuh.entity.RewardCouponDetail; import com.xiaolyuh.mapper.RewardCouponDetailMapper; @RunWith(SpringRunner.class) @SpringBootTest public class RewardCouponDetailServiceTest{ private static final Logger logger = LoggerFactory.getLogger(RewardCouponDetailServiceTest.class); @Autowired private RewardCouponDetailMapper rewardCouponDetailMapper; @Test @Transactional @Rollback(true)// 事务自动回滚,默认是true。可以不写 public void TestCustomer(){ RewardCouponDetail rewardCouponDetail = new RewardCouponDetail(); rewardCouponDetail.setRewardInfoId(1L); rewardCouponDetail.setCouponId("1"); rewardCouponDetail.setCouponDetailId(1L); rewardCouponDetail.setCreateTime(new Date()); rewardCouponDetailMapper.insert(rewardCouponDetail); logger.info(JSON.toJSONString(rewardCouponDetail)); Assert.assertNotNull(rewardCouponDetail.getId()); } }
以上是关于Junit单元测试的主要内容,如果未能解决你的问题,请参考以下文章