JUnit 和 TestNG的区别
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,网上看了一篇英文帖子,讲解JUnit和TestNG框架的区别,挺好的,我这里翻译下。1.对于注解类的支持功能JUnitTestNG标注为类/方法为测试类和方法@Test@Test标注为在suite中所
千家信息网最后更新 2025年12月04日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安全错误
数据库的锁怎样保障安全
服务器名片赞
mc服务器能用模组吗
延边州党委党组网络安全
数据库如何定义小数
域控服务器时间服务名称
流媒体服务器软件生产厂家
龙芯软件开发24
高职计算机网络技术专业课程
网络安全自查自纠检查单
联想服务器光盘怎么装系统
网络安全绘画不带文字
首都网络安全日引领导关注
怎么过网络技术
计算机网络安全试卷
软件开发标书商务部分
护士怎么学习网络技术
关于网络安全的心得与体会
怎样做个网络安全员
网络安全靠大家照片
国家网络安全宣传小短片
学校计划举办网络安全活动英文
银联软件开发加盟商哪个好
小米云端提取数据库
多出口pptp云服务器
tt互联网科技
服务器2核4g性能
数据库与计算机制图的关系
电脑服务器出错
云南软件开发培训排行
寻甸上门软件开发市场价