最近需要向组内其他成员普及一下关于Java测试用例的相关知识,特在此进行一下简单的学习和总结。

JUnit简介

JUnit是一个开源的Java单元测试框架,JUnit4对原有的JUnit框架进行了大幅度的改进,主要目标便是利用了Java中的Annotation,来代替以前必须要继承AbstractTestCase,以及要测试的方法名称必须test为前缀。

JUnit4中提供了三个Annotation,用来控制整个测试的生命周期:

  • @Before

相当与测试用例的初始化工作,在执行每个测试用例方法时,都会先执行该方法。

  • @After

测试用例的清理工作在该方法中编写,在每个方法执行完成后,都会进行清理。

@Before和@After可以保证一些测试用例中的资源在这些方法执行,不会受到@Test方法执行顺序的影响。

  • @Test

这个是实际的测试方法,会根据该方法中的断言语句(Assert)来进行测试用例的执行结果显示输出。

在@Test中,还有一些属性,这些属性都是非常有用的:

  • expect=xxxx.class(extends Throwable)

如果我们在测试方法中能够预料到一些错误的发生,就使用该方法进行处理。有时候,一个函数抛出异常也许是你希望得到的结果。

  • timeout=xxxx(一个毫秒值)

如果测试方法没有在指定的timeout时间内执行完成,该测试失败,这对于单元测试效率非常有帮助。

如果正在实践测试驱动开发,@Ignore可以暂时忽略掉一些已经定义但并没有实现的方法。

JUnit中有参数化测试的概念,只需要写一个测试函数,把若干种情况当成是参数传进去,进行测试即可。

类似下面的代码,就可以参数化的方式进行批量测试工作:

@RunWith(Parameterized.class)
public class BelongToRegionFunctionTestCase { private BelongToRegionFunction function; private boolean expected;
private int regionId;
private int parentRegionId; @Before
public void setUp() {
function = new BelongToRegionFunction();
} @After
public void tearDown() {
function = null;
} @Parameterized.Parameters
public static Collection prepareData() {
return Arrays.asList(
new Object[]{true, 15, 8},
new Object[]{true, 105, 8},
new Object[]{false, 2, 8}
);
} public BelongToRegionFunctionTestCase(boolean expected, int regionId, int parentRegionId) {
this.expected = expected;
this.regionId = regionId;
this.parentRegionId = parentRegionId;
} @Test
public void testOldRegion() throws IOException {
String filePath = this.getClass().getClassLoader().getResource("Region-000000000000000000000008-top100-new").getFile();
Assert.assertEquals(expected, function.evaluate(regionId,parentRegionId, filePath));
} @Test
public void testNewRegion() throws IOException {
String filePath = this.getClass().getClassLoader().getResource("Region-000000000000000000000008-top100-top100-top100-merge").getFile();
Assert.assertEquals(expected, function.evaluate(regionId,parentRegionId, filePath));
} }

Maven中运行JUnit

Maven本身不是一个单元测试框架,只是在构建执行到特定生命周期的时候,通过插件来执行JUnit的测试用例。这个插件就是maven-surefire-plugin,也成为Test Runner。

默认情况下,maven-surefire-plugin会执行测试源代码路径中的所有TestCase,路径为:src/test/java。maven中的test阶段是默认包含在一些阶段之前,也就是说package和install阶段都会默认先执行test,如果想要在package前跳过这个阶段,可以使用类似下面的命令:

maven package –DskipTests

如果不仅想要跳过测试运行,还需要跳过测试编译:

maven package –Dmaven.test.skip=true

如果在运行时某个测试用例执行失败,想要重新执行一次的时候,没有必要将所有的测试用例都跑一遍,仅需要执行部分的测试用例,maven-surefire-plugin提供了一个test参数可以让maven用户能够在命令行指定要运行的测试用例,可以使用通配符,以及加入多个Test类:

maven test –Dtest=Class*Test,Class2*Test

在idea中可以设置工程的Test Resources Folder,这样就可以在程序中用ClassLoader的getResource得到对应资源的路径和输入流,建议不要将测试使用的资源强行防至到对应的开发资源包中。

maven中可以定义测试资源的路径:

    <build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>

Java测试用例简介的更多相关文章

  1. Java SE 简介 & 环境变量的配置

    Java SE 简介 & 环境变量的配置 一.Java 技术的三个方向 Java 技术分为三个方向 javaSE( Java Platform Standard Edition 标准版)用来开 ...

  2. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...

  3. 一、Android NDK编程预备之Java jni简介

    转自:  http://www.eoeandroid.com/thread-264384-1-1.html 游戏开发 视频教程 博客 淘帖     论坛›eoe·Android应用开发区›Androi ...

  4. Java RMI 简介及其优劣势总结

    今天,帮别人看UDAS配置问题时,看到采用的是RMI方式的调用,如:rmi://10.20.134.140:2299/DataServer,而且这个端口是被直接硬编码在UDAS的代码中的.既然看到了, ...

  5. Java多线程简介

    Java多线程简介 Java中内置了对多线程的支持,让多线程的开发方便很多,但同时也带来了另外的复杂,线程间的交互以及很多的不确定性让多线程又显得很复杂.在此只是针对Java中多线程的基础做些说明,有 ...

  6. Java异常简介、异常捕获还是上抛总结

    概要 本章对Java中的异常进行介绍.内容包括:1.Java异常简介2.Java异常框架 一.Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序 ...

  7. Java Script 简介

    Java Script 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备.JavaScrip ...

  8. Java NIO系列教程(一)java NIO简介

    这个系列的文章,我们开始玩一玩IO方面的知识,对于IO和NIO,我们经常会接触到,了解他们的基本内容,对于我们的工作会有特别大的帮助.这篇博文我们仅仅是介绍IO和NIO的基本概念,以及一些关键词. 基 ...

  9. Java异常(一)Java异常简介及其框架

    Java异常(一)Java异常简介及其框架 概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机 ...

随机推荐

  1. FMDB给表添加新的字段

    1.首先判断添加的字段是否存在,如果不存在就添加. 2.代码演示: (1)判断是否存在,判断之前先导入头文件确保可以调用FMDB的api(#import “FMDatabaseAdditions.h” ...

  2. Visual studio 生成后事件说明

      在“配置属性->生成事件->生成后事件”属性页中的“命令行”编辑框中输入如下命令: copy "$(ProjectDir)$(IntDir)\$(ProjectName).t ...

  3. React之事件处理

    在react中,事件处理的写法和处理方式可能会和vue以及传统html有些不同. 一.事件名和默认行为阻止 事件名采用驼峰写法,并且方法名用大括号引入,而不是双引号: <button onCli ...

  4. TF随笔-10

    #!/usr/bin/env python# -*- coding: utf-8 -*-import tensorflow as tf x = tf.constant(2)y = tf.constan ...

  5. Vim技能修炼教程(8) - 多窗口

    多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...

  6. Python中基本的读文件和简单数据处理

    Python中基本的读文件和简单数据处理 暂无评论 DataQuest上面的免费课程(本文是Python基础课程部分),里面有些很基础的东西(csv文件读,字符串预处理等),发在这里做记录.涉及下面六 ...

  7. 基于Ubuntu16.04的GeForce GTX 1080驱动安装,遇到的问题及对应的解决方法

    1.在主机上插上GPU之后,查看设备: $ nvidia-smi Tue Dec :: +------------------------------------------------------- ...

  8. css3实现对radio和checkbox的美化

    一,如何隐藏小程序中的很粗的滚动条,实现页面的美化?   tit: 在开发小程序的过程中,无论是横向或者纵向当产生滚动条时,系统默认的滚动条会很粗,效果展示十分难看,我们可以通过设置如下wxss代码实 ...

  9. 【剑指offer】顺时针打印矩阵,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 1.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14 ...

  10. from sklearn.datasets import make_classification创建分类数据集

    make_classification创建用于分类的数据集,官方文档 例子: ### 创建模型 def create_model(): # 生成数据 from sklearn.datasets imp ...