史上最全JUnit4核心学习和使用、思维导图

前言

  • 最近公司项目走向规范化开发,在后端开发中的一个重要工具就是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包,maven的中央仓库下载
http://maven.outofmemory.cn/junit/junit/4.11/

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属于白盒测试的一种。

猜你喜欢

转载自blog.csdn.net/qq_37192800/article/details/79981951
今日推荐