是时候告别Junit了!
一、 青出于蓝而胜于蓝
二、 TestNG优于JUnit的设计详解
1.分组测试
分组测试可以很方便让你去指定你需要测试的某一批次的测试用例,我们可以使用@Test注解里的groups属性为某个测试方法指定一个或多个group,示例代码如下
public class TestExample { @Test(groups = "group1") public void test1(){ Assert.assertEquals(1+1,2); } @Test(groups = "group1") public void test2(){ Assert.assertEquals(1+2,3); } @Test(groups = "group2") public void test3(){ Assert.assertEquals(1+3,4); } } |
另外我们还需要建立一个testng.xml文件,去指定要运行的分组测试。
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <groups> <run> <include name="group1"/> </run> </groups> <classes> <class name="com.example.Boot.test.TestExample" /> </classes> </test> </suite> |
2.参数化测试
所谓参数化测试就是为测试用例提供参数数据,示例如下:
@Test(dataProvider = "data") public void hello(String name){ Assert.assertEquals(name,"world"); } @DataProvider(name = "data") public Object[][] data(){ return new Object[][]{{"world"}}; } |
3.依赖测试
当两个测试用例之间存在依赖关系,TestNG支持你使用注解l指定依赖关系。
@Test public void insert(){ System.out.println("insert data"); } @Test(dependsOnMethods = "insert") public void query(){ System.out.println("query data"); } |
上面的代码,如果query方法依赖的insert方法执行失败了,则query方法则将被跳过。如果insert失败了,还想要执行query方法的话,则可以在@Test中添加
alwaysRun = true的属性
需要说明的是这个用法不能用于单元测试,单元测试要求用例之间是隔离的,这也是为什么JUnit没有提供这个功能的原因。在集成测试等场景中需要的话则可以使用。
4.多线程测试
并发测试一直是测试的难点,TestNG提供了一套多线程执行测试用例的的方案,给并发测试带来了很大的方便。
@Test(threadPoolSize = 5,invocationCount = 30,timeOut = 100) public void multiThreadTest(){ Long id = Thread.currentThread().getId(); System.out.println("thread id: " + id); } |
threadPoolSize 指线程数量,invocationCount表示测试用例调用的次数,timeOut表示超时阀值
5.按优先级顺序测试
@Test 提供了一个很有用的priority属性来指定测试用例执行的优先级,数值越低,优先级越高。这个在测试流程的时候很有用!
public class PriorityTest { @Test(priority = 1) public void priority1(){ System.out.println("登录"); } @Test(priority = 2) public void priority2(){ System.out.println("首页"); } @Test(priority = 0) public void priority0(){ System.out.println("注册"); } } |
6.更丰富的注解
三、拥抱TestNG
从上面的介绍可以看到,TestNG相比JUnit提供了更全面的功能,更适用于互联网环境下的各个测试场景。而JUnit的定位仅仅是单元测试! 因此建议TestNG 作为 Java 项目的主要单元测试框架!