最近在看Junit4的相关知识,由于本身做的是自动化方面的测试,所以工作上着重于应用TestNG。恰好遇到了一个将case进行参数化的需求,故在此记录Junit4和TestNG在参数化方面的区别。

一、Junit4和TestNG的注释支持

特点 JUnit 4 TestNG
测试注释 @Test @Test
在套件中的所有测试运行之前运行 - @BeforeSuite
在套件中的所有测试运行之后运行 - @AfterSuite
测试之前运行 - @BeforeTest
测试之后运行 - @AfterTest
在调用属于任何这些组的第一个测试方法之前运行 - @BeforeGroups
在调用属于任何这些组的第一个测试方法之后运行 - @AfterGroups
在调用当前类的第一个测试方法之前运行 @BeforeClass @BeforeClass
在调用当前类的第一个测试方法之后运行 @AfterClass @AfterClass
在每个测试方法之前运行 @Before @BeforeMethod
在每个测试方法之后运行 @After @AfterMethod
忽略测试 @ignore @Test(enbale=false)
预期的异常 @Test(expected = ArithmeticException.class) @Test(expectedExceptions = ArithmeticException.class)
超时测试 @Test(timeout = 1000) @Test(timeout = 1000)

二、Junit4和TestNG的参数化支持

下面我们来针对最简单的计算器加法类进行测试。

Calculator.class

package jqi.testng.methods;/*** Just create a tiny class Calculator*/
public class Calculator
{public Calculator(){}public int add(int firstNumber, int secondNumber){return firstNumber + secondNumber;}public static void main( String[] args ){System.out.println( "Hello World!" );}
}

Junit4 中的实现

 1 package jqi.testng.testcases;
 2
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5
 6 import org.junit.BeforeClass;
 7 import org.junit.Test;
 8 import org.junit.runner.RunWith;
 9 import org.junit.runners.Parameterized;
10 import org.junit.runners.Parameterized.Parameters;
11 import org.junit.Assert;
12
13 import jqi.testng.methods.Calculator;
14
15 @RunWith(Parameterized.class)
16 public class CalculatorJunit4Test {
17
18      private int firstNumber;
19      private int secondNumber;
20      private int sum;
21      public static Calculator calculator;
22
23      public CalculatorJunit4Test(int firstNumber, int secondNumber, int sum){
24          super();
25          this.firstNumber = firstNumber;
26          this.secondNumber = secondNumber;
27          this.sum = sum;
28      }
29
30      @BeforeClass
31      public static void setUp(){
32          calculator = new Calculator();
33      }
34
35     /**
36      * 这里的返回的应该是一个可迭代数组,且方法必须是public static
37      * @return
38      */
39     @Parameters
40     public static Collection<Object[]> getParams(){
41
42          Object[][] data = new Object[][] {{12,9,21},{45,44,89},{18,9,27}};
43              return Arrays.asList(data);
44     }
45
46     @Test
47     public void a_addTest() {
48         Assert.assertTrue(calculator.add(firstNumber, secondNumber) == sum);
49     }
50 }

Junit4 test case

junit4对于参数化的支持有很多限制,必须将参数传递给初始化函数后才能够应用,而且参数的返回类型必须是 "List [ ]",因此数据已被限制为String或用于测试的原始类型值

TestNG 中的实现

package jqi.testng.testcases;import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;import jqi.testng.methods.Calculator;/*** Unit test for Calculator.*/
public class CalculatorTestNGTest
{public Calculator calculator;@BeforeTestpublic void setUp(){calculator = new Calculator();}/*** @return {{firstNumber, secondNumber, sum}, ...}* */@DataProvider(name="calculatorDataProvider")public Object[][] getData() {return new Object[][]{{12,9,21},{45,44,89},{18,9,27}};}@Test(dataProvider="calculatorDataProvider")public void a_addTest(int firstNumber, int secondNumber, int sum){Assert.assertTrue(calculator.add(firstNumber, secondNumber) == sum);}
}

TestNG test case

TestNG存在两种参数化方式,其中一种是利用XML的配置文件,这里略过这种方式,可以看到,TestNG的参数化测试非常用户友好和灵活(在XML文件或类内)。 它可以支持许多复杂的数据类型作为参数值

转载于:https://www.cnblogs.com/Seven13G/p/7762226.html

浅谈Junit4和TestNG中的参数化测试相关推荐

  1. 数字化时代 需要利用计算机辅助,浅谈计算机辅助工业设计中的人机交互

    浅谈计算机辅助工业设计中的人机交互 论文关键词:工业设计 计算机辅助工业设计 人机交互 论文摘要:计算机辅助工业设计是工业设计未来的发展方向,本文从工业设计及计算机辅助工业设计的一般含义出发,探究计算 ...

  2. python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题

    直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...

  3. 计算机技术在农业上应用论文,浅谈计算机在农业中的应用论文(2)

    浅谈计算机在农业中的应用论文篇二 <计算机技术在农业管理中的科学应用> 摘要:文章依据现代农业管理思想的内涵结合计算机应用技术的充分优势展开了如何在农业管理中全面应用计算机技术实现数字化. ...

  4. 浅谈线程池(中):独立线程池的作用及IO线程池

    在上一篇文章中,我们简单讨论了线程池的作用,以及CLR线程池的一些特性.不过关于线程池的基本概念还没有结束,这次我们再来补充一些必要的信息,有助于我们在程序中选择合适的使用方式. 独立线程池 上次我们 ...

  5. php编码 js解码,浅谈php和js中json的编码和解码

    php中 1)编码 $jsonstr = json_encode($array) 2)解码 $arr = json_decode($jsonstr) echo json_encode("中文 ...

  6. python查询数据库带逗号_浅谈pymysql查询语句中带有in时传递参数的问题

    直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...

  7. 谈计算机知识对学生的作用,浅谈计算机在教学中的作用

    浅谈计算机在教学中的作用 时间:2017-07-19 08:54:57 浅谈计算机在教学中的作用 计算机基础教育的教学目标是使学生掌握计算机的基本知识和操作技能,把计算机作为获取和交流信息的工具,为学 ...

  8. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  9. TestNG中的参数化– DataProvider和TestNG XML(带有示例)

    测试自动化,或所谓的自动化测试,并不像听起来那样容易. 必须考虑所有可能的用户交互的所有排列和组合,并且在此基础上,您将必须创建测试脚本以通过多种浏览器和OS组合来验证Web应用程序. 这就是参数化在 ...

最新文章

  1. jquery 实现Json节点的增删改查
  2. 每日一皮:据说PM就是这样忍受你的!
  3. 【修改版】10行代码爬取A股上市公司信息
  4. c++ string 另类写法
  5. Boost:BOOST_ASSERT_MSG扩展的用法测试程序
  6. Hello JavaFX 2.0:命令行介绍
  7. PID控制器开发笔记之二:积分分离PID控制器的实现
  8. 【Python】Numpy中对向量、矩阵的使用
  9. 每个电脑都会自己的SID号和GUID号,而且不会相同。。
  10. linux添加自定义的命令!
  11. 一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)
  12. 如何使用 python glob model
  13. python强制声明变量类型_python声明变量类型吗
  14. 多线程常见面试题(含常见项目遇到多线程问题解决及面试对话)
  15. 大数据,云计算,物联网和移动互联网与传统互联网,主要有什么关系?
  16. 计算机出错英语翻译,计算机各种错误信息翻译
  17. sqlite C接口增删改查,数据库优化
  18. [小o地图-数据] - 城市交通态势数据(实时路况)
  19. 人工智能-计算机视觉-图像处理-模式识别的关系
  20. Redis列表与集合

热门文章

  1. 4月27日微软云训练营活动-现场图集
  2. UIButton return(textField textView)
  3. FileUpload时用Javascript检查扩展名是否有效
  4. Google Doc API研究之一:模拟页面上传任意类型文件
  5. 转载:如何在 SQL Server 中使用配置选项调整内存使用量
  6. webpack.config.js和package.json
  7. Java Web 请求转发与请求重定向
  8. 05 state与setState、单向数据流
  9. Struts2_day01
  10. HBuilder:最快的Web开发IDE