我们用得最多的基本单元测试框架是junit和testng,下面对这两个工具做个对比。
功能比较
项目 | 注解 | 异常测试 | 忽略测试 | 超时测试 | 套件测试 | 分组 参数化(单值) | 参数化(对象) | 依赖测试 | 并发测试 |
---|---|---|---|---|---|---|---|---|---|
TestNG | Y | Y | Y | Y | Y | Y | Y | Y | Y |
Junit4 | Y | Y | Y | Y | Y | N | Y | N | N |
注解支持
描述 | 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) |
参数化测试 | @RunWith和@Parameter联合 | @DataProvider |
通过上面的对比可以看出,TestNG作为Java项目的单元测试框架是更有优势的,TestNG在参数化测试、依赖测试、套件测试、分组测试、并发测试等方面都比Junit4强,同时,TestNG涵盖了JUnit4的全部功能。