博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java知识积累——单元测试和JUnit(二)
阅读量:6069 次
发布时间:2019-06-20

本文共 2654 字,大约阅读时间需要 8 分钟。

首先来复习一下几个重要知识点,然后接着进行一些介绍。在上一篇文章中,我曾经贴过下面这张图片:

在Which method stubs would you like to create?这里,现在结合4个标注的含义来说明一下:

@BeforeClass  标注的方法会在类加载的时候执行一次,且仅此一次,该方法必须是public和static的

@AfterClass   标注的方法会在类销毁的时候执行一次,且仅此一次,该方法必须是public和static的

@Before  标注的方法会在每个测试方法执行前先执行一次

@After 标注的方法会在每个测试方法执行结束后执行一次

以上四个标注,对应了那个勾选列表中的四个方法,可以在创建测试类时根据具体情况进行勾选。

 

在测试过程中,可能需要针对一个方法的不同临界值进行多组数据的测试。下面给出这种情况下的测试方法:

在上一遍文章中的例子 中,Calculator类的square方法需要针对正数、负数、零3种情况进行测试。所以我们如下进行,首先在Calculator类上右键new一 个JUint Test Case,起名为CalculatorSquareTest,然后该类的代码修改如下:

1 package org.logback.test; 2  3 import static org.junit.Assert.*; 4 5 import java.util.Arrays; 6 import java.util.Collection; 7 8 import org.junit.Before; 9 import org.junit.Test; 10 import org.junit.runner.RunWith; 11 import org.junit.runners.Parameterized; 12 import org.junit.runners.Parameterized.Parameters; 13 14 @RunWith(Parameterized. class ) 15 public class CalculatorSquareTest { 16 17 private static Calculator example = new Calculator(); 18 19 private int param; 20 21 private int result; 22 23 @Parameters//定义测试数据集合,前者param后者result 24 public static Collection data(){ 25 return Arrays.asList(new Object[][]{ 26 {2,4}, 27 {0,0}, 28 {-3,9}, 29 }); 30 } 31 32 @Before 33 public void setUp() throws Exception { 34 example.clear(); 35 } 36 37 @Test 38 public void testSquare() { 39 example.square(param); 40 assertEquals(result, example.getResult()); 41 } 42 43 //构造函数,对变量进行初始化,注意参数顺序应与定义的测试集合的参数顺序一致 44 public CalculatorSquareTest(int param,int result){ 45 this.param = param; 46 this.result = result; 47 } 48 49 }

14行设置了本测试类的运行器为Parameterized.class,因为此类需要多组数据,所以不能采用默认的运行器。

23-30行是定义测试数据集合,此处的2元组数据的顺序要统一,并且与构造函数的参数顺序要一致。

44-47行是构造函数,通过定义的数据集合和构造函数,将要测试的情况传递给测试类,然后进行测试。

也就是说,执行了3次该测试类,依次采用了数据集合中的数据。此例中数据集合的顺序顺序为{处理值,预期处理结果}。

结果如下:

可以看到runs那里是3/3。

 

OK,此时我们的测试类数量就已经上升为2个了,如果分别运行2个测试类再观察结果可能比较麻烦。或者有人觉得这还不算什么,那要是有10个测试类呢?所以就引出了打包测试的概念,我们可以通过JUnit提供的机制,一次性把之前的2个测试类都执行了。

在Calculator类上右键new一个JUnit Test Case,方法处什么都不勾选,然后点击Finish。将代码改为如下:

1 package org.logback.test; 2  3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 import org.junit.runner.RunWith; 7 import org.junit.runners.Suite; 8 9 @RunWith(Suite.class) 10 @Suite.SuiteClasses({ 11 CalculatorSquareTest.class, 12 CalculatorTest.class 13 }) 14 public class CalculatorAllTest { 15 }

 

9行指定了此测试类的运行器

10-13行指定了要同时运行哪些测试类

该测试类并无实际实现

下面只要将此类run as JUnit Test即可,得到结果如图所示:

可以发现,我们上一遍文章的测试类,和这篇文章的测试类都同时执行了,并且列出了详细结果。

以上就是我对于JUnit的研究结果,我感觉一般的工作这些技巧就可以应付了,当然如果哪位Geek有更高级方便的用法也欢迎分享。

PS: 我存在过,我遇见过,我失败过。 有些路,明明有坑却从没人放警示牌。有些事,明明是错的却没人去管。有些话,明明应该告诉后来人却没人去说。 既然没人做,那就我来吧。希望我曾经历过的挫折不再重现于后来人。希望传承能够不是只挂在嘴边。希望人模人样的“人”能够真正做人。

转载于:https://www.cnblogs.com/felix-/p/4331929.html

你可能感兴趣的文章
调用ShellExecute所须要头文件
查看>>
【vijos】1750 建房子(线段树套线段树+前缀和)
查看>>
Chomsky_hierarchy
查看>>
MVC5 + EF6 入门完整教程
查看>>
linux netstat命令详解
查看>>
xml文件格式例如以下
查看>>
【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法
查看>>
Jmeter:图形界面压力测试工具
查看>>
eclipse svn登陆用户保存信息删除
查看>>
【笔记】《DirectX 9.0 3D游戏开发编程基础》:Direct3D初始化
查看>>
linux环境配置
查看>>
JavaScript Array对象
查看>>
基于Cloud Foundry平台部署nodejs项目上线
查看>>
libcurl提交表单上传文件
查看>>
ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
查看>>
windows 下rabbitmq 安装---转载
查看>>
PHP json_decode 函数解析 json 结果为 NULL 的解决方法
查看>>
苟富贵勿相忘
查看>>
使用GCD的dispatch_once创建单例
查看>>
【BZOJ】3319: 黑白树
查看>>