浅谈Junit4和TestNG中的参数化测试

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

一、Junit4和TestNG的注释支持

 

特点JUnit 4TestNG
测试注释@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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker查看和删除虚悬镜像

虚悬镜像是REPOSITORY和TAG为<none>的镜像 none镜像(虚悬镜像),那是因为 构建镜像过程中因为脚本错误导致很多镜像构建终止&#xff0c;产生很多none标签的版本 手动构建镜像的时候没有进行提交&#xff0c;遗留来的垃圾镜像 这些镜像占据较大的存储空间&#xff0c;需要…

MSN消息提示类(II)

纯js编写跨框架无图片支持调速度任意位置弹出需要ie5.5以上 <HTML><HEAD><SCRIPT languageJavaScript><!--/**//* ** ** 类名&#xff1a;CLASS_MSN_MESSAGE ** 功能&#xff1a;提供类似MSN消息框 ** 示例&#xff1a; ----------…

查看docker-compose --version报错syntax error near unexpected token `(‘‘usr/local/bin/docker-compose:

问题 执行docker-compose --version查看版本是报错如下 /usr/local/bin/docker-compose: line 2: html: No such file or directory /usr/local/bin/docker-compose: line 3: head: No such file or directory /usr/local/bin/docker-compose: line 4: meta: No such file …

spring的父子容器

在创建ssm项目工程时&#xff0c;经常需要读取properties资源配置文件&#xff0c;传统的方法当然可以。 但是spring提供了更简便的方法&#xff0c;value注解。 在page.properties文件中&#xff0c;配置分页信息。 这个时候&#xff0c;发现在Service层用value("${PAGES…

kubectl --help查看帮助命令

查看帮助命令 kubectl --help 具体查看某个操作 kubectl get --help

使用localstorage来存储页面信息

今天小颖在跟着慕课网学习vue&#xff0c;不学不知道&#xff0c;一学吓一跳&#xff0c;学了才发现&#xff0c;我之前知道的只是vue的冰山一角&#xff0c;嘻嘻&#xff0c;今天把小颖跟着慕课网学习的demo&#xff0c;给大家分享下&#xff0c;希望对大家有所帮助嘻嘻。 环境…

kubectl get cs 查看组件状态

查看组件状态 Healthy为正常 kubectl get cs

深圳SQL数据库823报错修复

深圳某电子公司SQL数据库恢复成功SQL2000数据库类型&#xff1a;SQL数据库版本&#xff1a;SQL2000MDF大小&#xff1a;1.3GB故障现象&#xff1a;SQL数据库正在编辑数据时&#xff0c;突然断电&#xff0c;开机后数据库报错再次附加数据库提示823报错&#xff01;客户要求&…

130242014022 蓝宏铮 第2次实验

一、实验目的 1&#xff0e;熟悉体系结构的风格的概念 2&#xff0e;理解和应用管道过滤器型的风格。 3、理解解释器的原理 4、理解编译器模型 二、实验环境 硬件&#xff1a; 软件&#xff1a;Python或任何一种自己喜欢的语言 三、实验内容 1、实现“四则运算”的简易翻译器。…

docker exec和docker attach的作用和区别

在使用docker 容器的时候&#xff0c;我们总会想看看容器内部长什么样子&#xff0c;推荐使用 docker exec 命令进入容器内部 因为docker attach 容器&#xff0c;再退出会使容器停止。而使用docker exec -it进入容器再退出不会导致容器停止 #进入当前容器后开启一个新的终端…

数据库排名网站

https://db-engines.com/en/ranking

最大最完整的---NAG Fortran 算法库

转载www.smart-cores.com中 NAG Fortran 算法库最大最完整的商用 Fortran 数值算法库NAG Fortran 软件库是由专家开发&#xff0c;适用于多种应用领域中&#xff0c;是 NAG 的核心产品。提供 1600 多个优质的函数享誉全球&#xff0c;是迄今最广泛的数学和统计算法算法库。 目…

统计软件简介

一、 SPSS统计软件 SPSS(Statistical Product and Service Solutions)&#xff0c;"统计产品与服务解决方案"软件。最初软件全称为"社会科学统计软件包"(SolutionsStatistical Package for the Social Sciences)&#xff0c;但是随着SPSS产品服务领域的扩…

Firebug Tutorial (Section 3): Script Tab :Javascript Debugging

2019独角兽企业重金招聘Python工程师标准>>> Firebug Tutorial – Script Tab : Javascript Debugging September 30, 2007 Firebug Tutorial Section 3: Script Tab : Javascript Debugging I’m going to show you how to debug the Javascript code with Firebug…