在自动化测试时,经常会用到TestNg 或 Junit 测试框架。那么它们之间有什么联系和区别,如何使用呢?在面试过程中也会经常被问到,结合网上一的些文章,做了以下总结。
TestNg主要用于单元测试和集成测试,它涵盖了 JUnit4 的全部功能,并且在参数化测试、依赖测试以及套件测试(组)方面功能上更加强大。那么TestNg与Junit4具体有哪些区别呢?
下面表中概括了JUnit 4和TestNG之间的功能比较。如下图所示
注释/注解支持在JUnit 4和TestNG中是非常类似的。
特点 | JUnit 4 | TestNG |
---|---|---|
测试注释 | @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) |
1.在Junit 4 中,在方法上使用@BeforeClass和@AfterClass时,那么该测试方法则必须是静态方法。TestNG 被@BeforeClass 和@AfterClass注释的方法可以不写成static方法。
2. 在JUnit 4中,注释命名约定有点混乱,例如“Before”,“After”和“Expected”,我们并不真正了解“Before”和“After”之前的内容,以及要测试中的“预期” 方法。TestiNG更容易理解,它使用类似“BeforeMethod”,“AfterMethod”和“ExpectedException”就很明了。
3.Junit4做忽略测试时,用的是@Ingore,而TestNG则是在@Test注解上添加参数,如:@Test(enabled = false)
4.“超时测试”表示如果单元测试所花费的时间超过指定的毫秒数,则测试将会终止,并将其标记为失败,此功能在JUnit 4和TestNG中均可实现。
Junit4做超时测试时,使用如:@Test(timeout=100)其中o是小写。而TestNG使用如:@Test(timeOut=100)其中O是小写
5.“异常测试”是指从单元测试中抛出的异常。
Junit4做异常测试时,使用如:@Test(expected = ArithmeticException.class) 。
@Test(expected = ArithmeticException.class)
public void divisionWithException() {
int i = 1/0;
}
而TestNg使用如:@Test(expectedExceptions = ArithmeticException.class)
@Test(expectedExceptions = ArithmeticException.class)
public void divisionWithException() {
int i = 1/0;
}
6.套