JUnit和TestNG的区别

  

网上看了一篇英文帖子,讲解JUnit和TestNG框架的区别,挺好的,我这里翻译下。


<强> 1。对于注解类的支持

功能
JUnitTestNG标注为类/方法为测试类和方法@Test@Test标注为在套件中所有测试之前运行
无@BeforeSuite标注为在套件中所有测试之后运行无@AfterSuite标注为在测试之前运行无@BeforeTest标注为在测试之后运行无@AfterTest标注为在测试组中第一个测试方法之前运行无@BeforeGroups标注为在测试组中最后一个测试方法之后运行无@AfterGroups标注为当前测试类中第一个测试方法之前运行@BeforeClass@BeforeClass标注为当前测试类中最后一个测试方法之后运行@AfterClass@AfterClass标注为在每次测试方法之前运行@Before@BeforeMethod标注为在每次测试方法之后运行@After@AfterMethod忽略某测试,让其不执行@Ignore@Test(启用=false)期待测试抛出什么异常@Test(预期=XXXException.class) @Test (exceptedExceptions=XXXException.class)测试超时,如果测试的执行时间超过了毫秒为单位设置的时间,那么就停止测试并且标记为失败
@Test(超时=1000)@Test(超时=1000)



<强> 2。测试参数化

对于TestNG和JUnit都有不同的参数化设定功能,可是表现形式不同。参数化设定意味着当运行测试的时候,参数可以从外部传入到这个测试单元中。


对于TestNG来说,要2部分,一是当构造测试代码时候,要用@ phase (value=https://www.yisu.com/zixun/XXX)来表示这个测试需要什么参数,这样的优点是可以让测试更加灵活并且可以根据不同的参数来得到不同的期望结果,比如:

公共类TestNGTest6_1_0 {
  
  @Test
  @ phase (value=" https://www.yisu.com/zixun/number ")
  公共空间parameterIntTest (int数){
  system . out。println(“参数化的数字:“+编号);
  }
  
  }


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

& lt; !DOCTYPE套件系统“http://beust.com/testng/testng-1.0.dtd”比;   & lt;套件名称=拔业牟馐蕴准北?   & lt;测试名="测试"比;      & lt;参数名称="数量" value=" https://www.yisu.com/zixun/2 "/比;      & lt; classes>   & lt;类名=" com.fsecure.demo.testng.TestNGTest6_0 "/比;   & lt;/classes>   & lt;/test>   & lt;/suite>



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


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

 @Test (dataProvider=癉ata-Provider-Function”)
  公共空间parameterIntTest (TestNGTest6_3_0 clzz) {
  system . out。println(“参数化的数字是:”+ clzz.getMsg ());
  system . out。println(“参数化的数字是:”+ clzz.getNumber ());
  }

然后相应的我们用@DataProvider来标注一个方法,这个方法提供了数据:

//这个函数将提供patameter数据
  @DataProvider (name=" Data-Provider-Function ")
  公共对象[][]parameterIntTestProvider () {
  
  TestNGTest6_3_0 obj=new TestNGTest6_3_0 ();
  obj.setMsg (“Hello”);
  obj.setNumber (123);
  
  返回新对象[][]{
  {obj}
  };
  }



3。测试依赖性:

对于JUnit来说,所有的测试彼此之间都是独立的,毫无依赖性。

但是对于TestNG来说,我们完全可以让测试彼此之间有依赖性,做法就是dependsOnMethods属性来标识一个被依赖的测试方法:

@Test   公共空间method1 () {   system . out。println(“这是方法1”);   }   @Test (dependsOnMethods={" method1 "})   公共空间method2 () {   system . out。println(“这是方法2”);   }


JUnit和TestNG的区别