前言
最近公司项目走向规范化开发,在后端开发中的一个重要工具就是JUnit4,保证了团队开发中,每一个人写的方法、接口、模块等,都是没有错的(抛开业务逻辑,并不是保证是对的!单元测试保证你测试的模块和你的预期是一致的),团队开发的效率和自身debug的效率也大大提高,虽然看上去,增加写单元测试代码的时间,但是,在整个项目的开发中,它会极大的缩短你处理异常、查找BUG的时间,相信我,快来使用JUnit4进行单元测试。
本文涵盖JUnit4的绝大多数知识点,核心。此文章是总结性质文章,用来加深JUnit理解和使用,共勉。
初识JUnit
真的非常简单,好用
下面例子的意思是,add()方法在传入参数1、参数2后,返回的结果是不是和A值相同,如果相同,true,反之,false。此方法是可以单独运行的,测试通过,控制台显示一个绿条提示,不通过,红条提示。
- 这是一个最简单的测试例子
- import static org.junit.framework.assertEqual;
- import org.junit.Test;
- public Class DemoTest{
- @Test
- public void testAdd(){
- assertEquals(“预期的值A”, add(参数1, 参数2));
- }
- }
复制代码
引用架包1.maven项目直接在pom.xml文件中引入依赖 - <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
复制代码2.非maven项目下载jar包 JUnit的核心注解
JUnit 4 常用的几个annotation 介绍 ★ @Before:初始化方法,在任何一个测试执行之前必须执行的代码; ★ @After:释放资源,在任何测试执行之后需要进行的收尾工作。在每个测试方法执行之后执行一次,该annotation只能修饰public void 方法; ★ @Test:测试方法,表明这是一个测试方法。在Junit中将会自动被执行。该annotation只你呢个修饰public void 方法。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。至于方法内该写些什么,那就要看你需要测试些什么了;在这里可以测试期望异常和超时时间,如 @Test(timeout = 100):我们给测试函数设定一个执行时间,超过了这个时间(100毫秒),它们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。 ★ @Ignore:忽略的测试方法,标注的含义就是“某些方法尚未完成,暂不参与此次测试”;这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。 ★ @BeforeClass:针对所有测试,只执行一次,且必须为public static void; ★ @AfterClass:针对所有测试,将会在所有测试方法执行结束后执行一次,且必须为public static void;
所以一个Junit 4 的单元测试用例执行顺序为:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;每一个测试方法的调用顺序为:@Before –> @Test –> @After。
思维导图 详情
额外内容 @Test的属性 1.@Test(timeout=1)设置超时时间,以s为单位,超出报错。 2.@Test(expected= 异常类型IndexOutOfBoundsException.class) 有一个预期的异常时,不报错 对测试方法注意
1.测试方法上必须使用@Test进行修饰 2.测试方法必须使用public void修饰,不带任何参数 3.新建一个源码目录(如test)来存放我们的测试代码 4.测试类的包应该和被测试类保持一致 5.建议测试类使用Test作为类名的后缀,测试方法使用test作为方法名的前缀 凡是项目中集成了Spring框架的,由于bean实列都交给spring 管理(xml配置文件),要做单元测试就比较苦难,junit4 单元测试非常方便。
常用断言,包含相同的方法的重载方法
Assert.方法名( ),方法名有很多,用法一样,简单高效。 项目中包含Spring框架进行bean的管理,单元测试核心要点。
一、加入依赖包 使用Spring的测试框架需要加入以下依赖包: JUnit 4 (官方下载:http://www.junit.org/) Spring Test (Spring框架中的test包) Spring 相关其他依赖包(不再赘述了,就是context等包)
二、创建测试源目录和包 在此,推荐创建一个和src平级的源文件目录,因为src内的类都是为日后产品准备的,而此处的类仅仅用于测试。而包的名称可以和src中的目录同名,这样由于在test源目录(source file),所以不会有冲突,而且名称又一模一样,更方便检索。
三、创建测试类 创建一个测试用的类,推荐名称为 “被测试类名称 + Test”。
四、关于单元测试时,事物回滚的核心 测试类应继承与 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests 对于 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 类的选择:如果再你的测试类中,需要用到事务管理(比如要在测试结果出来之后回滚测试内容),就可以使用AbstractTransactionalJUnit4SpringTests类。事务管理的使用方法和正常使用Spring事务管理是一样的。再此需要注意的是,如果想要使用声明式事务管理,即使用AbstractTransactionalJUnitSpringContextTests类,请在applicationContext.xml文件中加入transactionManager bean: - <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
复制代码
五、配置测试类
添加如下内容在class前,用于配置applicationContext.xml文件的位置,回去读取Spring管理的bean,这样就可以通过依赖注入的方式来使用实例了。
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:/config/applicationContext-*.xml"})
复制代码
六、创建测试方法
创建测试用方法,推荐名称为 “被测方法名称+ Test”。
测试方法上方加入 @Test
七、 通过JUnit 4 执行
右键方法名,选择则“Run As”→“JUnit Test”即可,或者选择运行整个Class文件
八、JUnit属于白盒测试的一种。
|