一、环境搭建

对于习惯使用Eclipse开发平台来说,Junit早已是非常通常的插件,在Eclipse开发平台中,可以非常方便地搭建Junit测试环境。

1、在Eclipse上创建工程,任何Java工程都行。

2、引入Junit的libraries库,选用Junit4。如下图所示:

3、新建一个Java类,用于演示Junit4类的自动生成,java代码如下:

[java]view plaincopy
  1. package com.hy;
  2. public class Demo {
  3. public void method1() {
  4. System.out.println("method1");
  5. }
  6. public void method2() {
  7. System.out.println("method2");
  8. }
  9. public void method3() {
  10. System.out.println("method3");
  11. }
  12. }

4、在该类上右键单击新建,选JUnit Test Case,自动生成一个对应的测试类,如下图所示:

4、这样就能自动地生成对应的测试类了,测试类代码发下:

[java]view plaincopy
  1. package com.hy;
  2. import static org.junit.Assert.*;
  3. import org.junit.After;
  4. import org.junit.AfterClass;
  5. import org.junit.Before;
  6. import org.junit.BeforeClass;
  7. import org.junit.Test;
  8. public class DemoTest {
  9. @BeforeClass
  10. public static void setUpBeforeClass() throws Exception {
  11. }
  12. @AfterClass
  13. public static void tearDownAfterClass() throws Exception {
  14. }
  15. @Before
  16. public void setUp() throws Exception {
  17. }
  18. @After
  19. public void tearDown() throws Exception {
  20. }
  21. @Test
  22. public void testMethod1() {
  23. fail("Not yet implemented");
  24. }
  25. @Test
  26. public void testMethod2() {
  27. fail("Not yet implemented");
  28. }
  29. @Test
  30. public void testMethod3() {
  31. fail("Not yet implemented");
  32. }
  33. }

5、如此一来,测试类环境的搭建过程就完成了,最后要做的就是,根据实际的业务需求,对测试类中的测试方法编写单元测试代码,直到运行调通。

二、基本规则

从上面的演示可知,测试类名一般都以Test结尾,测试方法名以test开头。这个也是Junit的基本命名规则。

三、Junit注解

我们此次针对的是Junit4版本,注解也是在Junit4版本才有的,之前的版本并无注解功能。而注解开发基本上被认为是一种优秀的设计,所以我们写单元测试用例时,尽可能地去了解并使用注解。

@Test:使用该注解的方法为测试方法,自动运行时能够识别并被执行

包含两个参数:expected=XXXException.class 期望出现的异常

timeout=xxx 设定程序运行的超时时间

@Ignore:被忽略的测试方法

@Before:在每个测试方法之前运行

@After: 在每个测试方法之后运行

@BeforeClass:在所有测试开始之前运行

@AfterClass:在所有测试开始之后运行

以上几个就是Junit 4的关键注解,熟练使用这几个注解,将来的测试用例编写肯定能事半功倍。

注意:@Before与@BeforeClass的区别

@Before会加在每个方法前执行,即有几个@Test就会执行几遍。

@BeforeClass 只在所有测试之前执行,只会执行一次。并且@BeforeClass修饰的方法必须是公有的静态方法(public static )。

@After和@AfterClass也类似

每个测试类中这四个注解不能重复使用,一个方法只能从这四个注解中挑选其中一个。

四、基本写法

1、setUp(),tearDown(),setUpBeforeClass(),tearDownAfterClass()这四个方法其实就是对应的@Before、@BeforeClass、@After、@AfterClass这四个注解,在Junit4开始使用注解时,其实可以替代这四个方法的功能,只是这四个方法是历史遗留方法,可以考虑使用,也可以直接使用注解替代。

2、Assert是单元测试用例的核心,建议使用静态导入。

3、待测试对象,一般建议设计成静态的。

4、测试方法的要求:带@Test注解,方法名随意,返回值必须为void,不能带有参数,可以声明异常(可以参考演示代码)。

5、Fixture方法的作用

前面介绍的@Before、@BeforeClass、@After、@AfterClass注解修饰的方法,即为Fixture方法,它是在某些阶段必然被调用的方法,如注解功能所示。

@Before、@After修饰方法的一个用处是对待测试对象的“复原”操作,如成员变量回归,数据库回滚等,目的是消除@Test方法之间的耦合。也可以用来打印日志。

@BeforeClass修饰方法可以设计成用来加载一些耗时耗力的操作,如文件流的读取,数据库连接等,然后在@AfterClass中释放对应的资源即可。

6、限时测试

@Test(timeout=1000)超时时间单位为毫秒

用于测试是否有死循环工是实时性要求比较高的用例,这个非常方便而且非常有用。

7、测试异常

@Test(expected=XXXException.class) XXXException为声明式异常

用来验证声明式异常,注意此测试的含义:出现了期望的异常,叫做正常,若没出现异常,Junit会报错,认为不正常。这段描述有些拗口,请各位多琢磨琢磨。

8、运行器Runner

类注解@RunWith,指定不同的类可以改变测试类的行为

9、参数化测试

主要是针对一些相同功能却要进行多组参数测试的情况,开发步骤如下:

1)参数化测试的类和普通测试类不同,要用特殊的Runner,类注解需要改为@RunWith(Parameterized.class)

2)定义该测试类的成员变量,一个放测试参数,另一个放该参数产生的预期结果

3)定义测试数据集合方法 public static Collection data() {...},注意该方法要用@Parameters修饰(数据格式为二维数组)

4)定义带参数的构造函数,注意定义数据集合时,要和构造函数参数次序一致

其他的与普通测试类似

注意:若测试数据有两条,则该类下的所有@Test的方法都会执行两次,所以参数化测试的类不要和别的@Test放在一起。参数化测试方法一般建议单独建立类。

演示代码如下:

[java]view plaincopy
  1. //指定@RunWith
  2. @RunWith(Parameterized.class)
  3. public class ParamTest {
  4. //定义成员变量,i为测试参数,j为测试结果
  5. private int i;
  6. private int j;
  7. //构造函数
  8. public ParamTest(int i, int j) {
  9. super();
  10. this.i = i;
  11. this.j = j;
  12. }
  13. //测试数据集合,注意使用的注解,数据结构及次序
  14. @Parameters
  15. public static Collection data() {
  16. return Arrays.asList(new Object[][]{{1,2},{3,4},{4,6}});
  17. }
  18. @Test
  19. public void testMethod1() {
  20. System.out.println(i);
  21. System.out.println(j);
  22. //简单测试,只测试参数加1会不会等于预期结果
  23. Assert.assertEquals(i+1, j);
  24. }
  25. }

预期的执行结果是前两组参数测试正确,最后一组测试错误,运行后的结果为:

执行结果与预期结果相符合,OK

10、打包测试

将测试类集中起来运行,提高测试效率,代码如下:

[java]view plaincopy
  1. @RunWith(Suite.class)
  2. @Suite.SuiteClasses({
  3. DemoTest.class
  4. })
  5. public class ModuleTest {
  6. public ModuleTest() {
  7. // TODO Auto-generated constructor stub
  8. }
  9. }

1)@Suite.SuiteClasses里面的是需要打包测试的类

2)该类中可以为空,类名建议为模块名+Test结尾,如ModuleTest.java

以上是Junit4的最基本的使用,相信掌握了这些,对于编写常规的测试用例已经不是难事,同样,Junit还有更多更有意思的功能等待我们去挖掘……

Junit4 简单教程相关推荐

  1. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  2. idea 从svn导入多个项目_IDEA导入项目简单教程

    该教程用于IDEA初学者导入eclipse项目,或者导入其他已经写好的Java源程序的简单教程. 我们用IDEA打开一个已经写好的项目源文件时,如果没有配置好,就会出现:JDK配置失误报错.程序无法启 ...

  3. expect简单教程

    expect简单教程 一.概述 expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Pas ...

  4. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  5. Git和Github简单教程

    网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章主要的目标是用较少的时间学习Git和Gi ...

  6. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  7. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  8. wcf简单教程(10) ajax调用,wcf简单教程(10) ajax调用

    wcf简单教程(10) ajax调用 [2021-02-11 16:23:59]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  9. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

最新文章

  1. Silverlight学习笔记十七BingMap(六)之获取图片系统的图片信息ImageryService的应用...
  2. python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法
  3. 变量相关命令(env,export,set,read, array, declare)
  4. Linux内核网络数据包发送(二)——UDP协议层分析
  5. linux 源码 调试,开发一个Linux调试器(六):源码级逐步执行
  6. lombok插件:Data自动get/set方法, Slf4j实现Logger的调用
  7. 1.uniq去重命令讲解
  8. juc线程池原理(六):jdk线程池中的设计模式
  9. arp攻击 python_python之arp攻击
  10. [转载] Python中pass的作用
  11. 2018中国国际大数据大会专属报名通道(粉丝专享)开通啦!
  12. Linux系统查看内存的几个小命令
  13. css2列布局,左边div宽度固定,右边div宽度自适应
  14. Java编译期优化思维导图
  15. Android使用keytool-importkeypair生成系统签名
  16. 杂谈:软件程序和芯片的区别
  17. 移动安全(1) - Win10 drozer环境搭建
  18. 12种 vo2dto 方法,就 BeanUtils.copyProperties 压测最拉胯!【快双11了,别用错喽】
  19. Agents and Multi-agent System考试重要知识点整理
  20. AI可能真的要代替插画师了……

热门文章

  1. 一加7充电_一加真无线耳机曝光,65W快速充电器获认证
  2. pycharm cant open file_PyCharm
  3. java 保垒机telnet,开源堡垒机系统Teleport
  4. 【渝粤教育】国家开放大学2019年春季 1124流行病学 参考试题
  5. 【渝粤题库】陕西师范大学200701 数字逻辑
  6. datagridview控件读写mysql数据库表格的方法_c# datagridview表格控件常用操作
  7. php内容缓存输出,PHP使用缓存即时输出内容(output buffering)的方法
  8. java里面自行车的属性_11、Java基础知识
  9. toString()方法使用
  10. php检测一个变量是否设置函数,php如何判断变量是否有设置的函数