JUnit 和 TestNG的区别
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,网上看了一篇英文帖子,讲解JUnit和TestNG框架的区别,挺好的,我这里翻译下。1.对于注解类的支持功能JUnitTestNG标注为类/方法为测试类和方法@Test@Test标注为在suite中所
千家信息网最后更新 2025年02月01日JUnit 和 TestNG的区别
网上看了一篇英文帖子,讲解JUnit和TestNG框架的区别,挺好的,我这里翻译下。
1.对于注解类的支持
功能 | JUnit | TestNG |
标注为类/方法为测试类和方法 | @Test | @Test |
标注为在suite中所有测试之前运行 | 无 | @BeforeSuite |
标注为在suite中所有测试之后运行 | 无 | @AfterSuite |
标注为在测试之前运行 | 无 | @BeforeTest |
标注为在测试之后运行 | 无 | @AfterTest |
标注为在测试Group中第一个测试方法之前运行 | 无 | @BeforeGroups |
标注为在测试Group中最后一个测试方法之后运行 | 无 | @AfterGroups |
标注为当前测试类中第一个测试方法之前运行 | @BeforeClass | @BeforeClass |
标注为当前测试类中最后一个测试方法之后运行 | @AfterClass | @AfterClass |
标注为在每次测试方法之前运行 | @Before | @BeforeMethod |
标注为在每次测试方法之后运行 | @After | @AfterMethod |
忽略某测试,让其不执行 | @Ignore | @Test(enable=false) |
期待测试抛出什么异常 | @Test(expected=XXXException.class) | @Test(exceptedExceptions=XXXException.class) |
测试超时,如果测试的执行时间超过了毫秒为单位设置的时间,那么就停止测试并且标记为失败 | @Test(timeout=1000) | @Test(timeout=1000) |
2.测试参数化
对于TestNG和JUnit都有不同的参数化设定功能,可是表现形式不同。参数化设定意味着当运行测试的时候,参数可以从外部传入到这个测试单元中。
对于TestNG来说,要2部分,一是当构造测试代码时候,要用@Parameters(value=XXX)来表示这个测试需要什么参数,这样的优点是可以让测试更加灵活并且可以根据不同的参数来得到不同的期望结果,比如:
public class TestNGTest6_1_0 { @Test @Parameters(value="number") public void parameterIntTest(int number) { System.out.println("Parameterized Number is : " + number); } }
然后,在我们的XML文件中,我们把参数的具体值设置进来,如下:
那么,如果我们要给的参数比较复杂,我们无法用一个简单的String或者 原子类型在XML文件"推"给测试方法,那么怎么办呢?这时候,我们就要用"拉"模型了,我们用一个DataProvider属性来给被测试的方法上声明它需要的数据,然后平行的,用@DataProvider注解来标注一个方法,让这个方法的返回值返回具体的数据,这样我们2个拼接下就完美了。
比如说:下面代码声明我们的测试类需要一个DataProvider:
@Test(dataProvider = "Data-Provider-Function") public void parameterIntTest(TestNGTest6_3_0 clzz) { System.out.println("Parameterized Number is : " + clzz.getMsg()); System.out.println("Parameterized Number is : " + clzz.getNumber()); }
然后相应的我们用@DataProvider来标注一个方法,这个方法提供了数据:
//This function will provide the patameter data @DataProvider(name = "Data-Provider-Function") public Object[][] parameterIntTestProvider() { TestNGTest6_3_0 obj = new TestNGTest6_3_0(); obj.setMsg("Hello"); obj.setNumber(123); return new Object[][]{ {obj} }; }
3.测试依赖性:
对于JUnit 来说,所有的测试彼此之间都是独立的,毫无依赖性。
但是对于 TestNG来说,我们完全可以让测试彼此之间有依赖性,做法就是dependsOnMethods属性来标识一个被依赖的测试方法:
@Test public void method1() { System.out.println("This is method 1"); } @Test(dependsOnMethods={"method1"}) public void method2() { System.out.println("This is method 2"); }
测试
方法
运行
参数
不同
依赖性
数据
之间
代码
功能
属性
文件
时候
时间
注解
复杂
优点
做法
单位
单元
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嵌入式开发软件开发培训学校
电脑服务器爆满怎么办
关于青少年网络安全的文章
维护好网络安全的标语
绩溪自动化软件开发服务耗材
戴尔服务器价格最高
qq服务器版
彩票游戏软件开发公司
数字鼓楼业务应用及网络安全保障
网络安全割接风险评估报告
医院信息系统网络安全ppt
蚌埠电商软件开发定制
河南平顶山零基础学软件开发
开展校园网络安全检查
香港软件开发的工作
当前我国网络技术环境分析
服务器虚拟化的概念及特点
北邮网络安全和信息安全
玉溪长期上门回收服务器
聚焦网络安全主题活动文章
幼儿园网络安全工作记录
山西统一软件开发服务参考价格
集客网络技术支撑职责
建筑工程安全隐患数据库
吉林省创益网络技术
数据库国产化替代的中场战事
普陀区游戏软件开发项目
工作邮箱使用的服务器
数据库系统的的组成
安装dns服务器的过程步骤