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)来表示这个测试需要什么参数,这样的优点是可以让测试更加灵活并且可以根据不同的参数来得到不同的期望结果,比如:

1
2
3
4
5
6
7
8
9
public  class  TestNGTest6_1_0 {
                                                                                                                                                                                                      
        @Test
        @Parameters (value= "number" )
        public  void  parameterIntTest( int  number) {
           System.out.println( "Parameterized Number is : "  + number);
        }
                                                                                                                                                                                                      
       }


然后,在我们的XML文件中,我们把参数的具体值设置进来,如下:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE suite SYSTEM  "http://beust.com/testng/testng-1.0.dtd"  >
<suite name= "My test suite" >
   <test name= "testing" >
                                                                                                                                                                                      
     <parameter name= "number"  value= "2" />
                                                                                                                                                                                      
     <classes>
        < class  name= "com.fsecure.demo.testng.TestNGTest6_0"  />
     </classes>
   </test>
</suite>



那么,如果我们要给的参数比较复杂,我们无法用一个简单的String或者 原子类型在XML文件”推“给测试方法,那么怎么办呢?这时候,我们就要用”拉“模型了,我们用一个DataProvider属性来给被测试的方法上声明它需要的数据,然后平行的,用@DataProvider注解来标注一个方法,让这个方法的返回值返回具体的数据,这样我们2个拼接下就完美了。


比如说:下面代码声明我们的测试类需要一个DataProvider:

1
2
3
4
5
@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来标注一个方法,这个方法提供了数据:

1
2
3
4
5
6
7
8
9
10
11
12
//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属性来标识一个被依赖的测试方法:

1
2
3
4
5
6
7
8
@Test
    public  void  method1() {
       System.out.println( "This is method 1" );
    }
    @Test (dependsOnMethods={ "method1" })
    public  void  method2() {
        System.out.println( "This is method 2" );
    }




本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1217389,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
Java 测试技术
Java一分钟之-单元测试:JUnit与TestNG
【5月更文挑战第16天】本文介绍了Java常用的单元测试框架JUnit和TestNG,JUnit以其简洁注解受到青睐,而TestNG则提供更高级功能如参数化测试。常见问题包括测试未执行、断言失败等,解决办法包括检查项目配置、调整测试顺序。注意保持测试简单独立,确保高覆盖率。选择合适的框架可提升代码质量。
90 0
|
6月前
|
XML Java 测试技术
TestNG 与 JUnit 测试框架:哪个更好?
【2月更文挑战第16天】
228 1
TestNG 与 JUnit 测试框架:哪个更好?
|
测试技术
软件测试面试题:解释使用TestNG而不是JUnit框架的好处?
软件测试面试题:解释使用TestNG而不是JUnit框架的好处?
185 0
|
XML 测试技术 数据格式
利器 | TestNG 与 Junit 对比,测试框架如何选择?
利器 | TestNG 与 Junit 对比,测试框架如何选择?
|
XML 测试技术 数据格式
利器 | TestNG 与 Junit 对比,测试框架如何选择?
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
|
XML 测试技术 数据格式
利器 | TestNG 与 Junit 对比,测试框架如何选择?
TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下: ![](https://ceshiren.com/uploads/default/original/3X/7/3/731391a1eddb1e44ccb4a50bedbe0df0cbdaf138.png) ![](https://ceshiren.com/uploads/def
|
XML Java 测试技术
追求代码质量: JUnit 4 与 TestNG 的对比
经过长时间积极的开发之后,JUnit 4.0 于今年年初发布了。JUnit 框架的某些最有趣的更改 —— 特别是对于本专栏的读者来说 —— 正是通过巧妙地使用注释实现的。
1007 0
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架