最近在看Junit4的相关知识,由于本身做的是自动化方面的测试,所以工作上着重于应用TestNG。恰好遇到了一个将case进行参数化的需求,故在此记录Junit4和TestNG在参数化方面的区别。

一、Junit4和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)

 

二、Junit4和TestNG的参数化支持

 

下面我们来针对最简单的计算器加法类进行测试。

Calculator.class

package jqi.testng.methods;

/**
 * Just create a tiny class Calculator
 */
public class Calculator
{
    public Calculator(){}
    
    public int add(int firstNumber, int secondNumber){
        return firstNumber + secondNumber;
    }
    
    
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

 

Junit4 中的实现

 

 1 package jqi.testng.testcases;
 2 
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5 
 6 import org.junit.BeforeClass;
 7 import org.junit.Test;
 8 import org.junit.runner.RunWith;
 9 import org.junit.runners.Parameterized; 
10 import org.junit.runners.Parameterized.Parameters;
11 import org.junit.Assert;
12 
13 import jqi.testng.methods.Calculator;
14 
15 @RunWith(Parameterized.class)
16 public class CalculatorJunit4Test {
17     
18      private int firstNumber;  
19      private int secondNumber; 
20      private int sum;
21      public static Calculator calculator;
22      
23      public CalculatorJunit4Test(int firstNumber, int secondNumber, int sum){
24          super();
25          this.firstNumber = firstNumber;  
26          this.secondNumber = secondNumber; 
27          this.sum = sum; 
28      }
29      
30      @BeforeClass
31      public static void setUp(){
32          calculator = new Calculator();
33      }
34      
35     /**
36      * 这里的返回的应该是一个可迭代数组,且方法必须是public static
37      * @return
38      */
39     @Parameters
40     public static Collection<Object[]> getParams(){
41 
42          Object[][] data = new Object[][] {{12,9,21},{45,44,89},{18,9,27}};  
43              return Arrays.asList(data);  
44     }
45     
46     @Test
47     public void a_addTest() {
48         Assert.assertTrue(calculator.add(firstNumber, secondNumber) == sum);
49     }
50 }
Junit4 test case

相关文章: