浅谈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;需要…

局部变量、全局变量、堆、堆栈、静态和全局

局部变量、全局变量、堆、堆栈、静态和全局--------------------------------------------------------------- 一般全局变量存放在数据区&#xff0c;局部变量存放在栈区&#xff0c; 动态变量存放在堆区&#xff0c;函数代码放在代码区。 ----------------------------------…

博客园的编辑器毛病真多.....

1.有时候首行插入代码后&#xff0c;想删除代码做不到了——代码可以删除&#xff0c;可是那个框死活删不掉。 2.有时候删除大段内容的时候会突然卡住&#xff0c;然后整个页面回退到初始状态——编辑的内容没了&#xff0c;自动保存中也没有。 3.有时候进入编辑页面能看到编辑…

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 …

Android隐藏软键盘收回软键盘

代码改变世界 Android隐藏软键盘收回软键盘 InputMethodManager imm (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); // 隐藏软键盘 imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); 代码中点击按钮实现隐藏软键盘…

oracle低权限下获取shell

转载请标明:http://hi.baidu.com/hack_forensic 《关于oracle列目录的可行性测试》 经过本人测试,确实可行,解决了 kj021320文章的遗憾,kj021320在文章<<ORACLE 建立数据文件WriteWebShell>>最后说,当然这个方法缺点就是你要知道WEB路径.少费话,直接贴code: crea…

spring的父子容器

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

kubectl --help查看帮助命令

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

【网络基础】《TCP/IP详解》学习笔记3

一&#xff0e; 第四章&#xff1a;《ARP&#xff1a;地址解析协议》问题一&#xff1a;ARP的作用&#xff1f;ARP为IP地址到对应的硬件地址提供动态映射。问题二&#xff1a;ftp hostname的过程。1) DNS解析&#xff0c;将hostname解析成IP地址2) 请求TCP用得到的IP地址建立连…

使用localstorage来存储页面信息

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

kubectl get cs 查看组件状态

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

[问题]魔兽双击地面回到选中的单位

问题描述&#xff1a;在玩魔兽时(dota或战略都一样)&#xff0c;鼠标双击地面或者在小地图上拖动鼠标松开的时候&#xff0c;画面总是回到已选中的那个单位。 问题原因&#xff1a;其他程序的快捷键和魔兽的快捷键冲突。在我的电脑上发现是“有道桌面词典”&#xff0c;具体是什…

UITextField实时监听输入文本的变化

开始用如下代理方法发现只能监听到变化后的前一位 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{//变化后的字符串NSLog("%",textField.text);return YES; } 然后在代理方法里面…

深圳SQL数据库823报错修复

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

JAVA字符串格式化-String.format()的使用

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法&#xff0c;两者有类似之处。format()方法有两种重载形式。 format(String format, Object... args) 新字符串使用本地语言环境&#xff…

Unicorn - W3C 统一验证工具

近日&#xff0c;W3C发布了Unicorn&#xff1a;帮助改进网页质量的一站式工具。Unicorn由4个流行的工具组合而成&#xff08;包括Markup验证器、CSS验证器、mobileOk检查器及Feed验证器&#xff09;并提供了一个统一的接口。点击以下地址打开Unicorn&#xff1a;Unicorn W3C统一…

130242014022 蓝宏铮 第2次实验

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