zoukankan      html  css  js  c++  java
  • 浅谈Junit4和TestNG中的参数化测试

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

    一、Junit4和TestNG的注释支持

    特点JUnit 4TestNG
    测试注释 @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

    junit4对于参数化的支持有很多限制,必须将参数传递给初始化函数后才能够应用,而且参数的返回类型必须是 "List [ ]",因此数据已被限制为String或用于测试的原始类型值

    TestNG 中的实现

    package jqi.testng.testcases;
    
    import org.testng.Assert;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    import jqi.testng.methods.Calculator;
    
    /**
     * Unit test for Calculator.
     */
    public class CalculatorTestNGTest 
    {
        public Calculator calculator;
        
        @BeforeTest
        public void setUp(){
            calculator = new Calculator();
        }
        /**
         * @return {{firstNumber, secondNumber, sum}, ...}
         * */
        @DataProvider(name="calculatorDataProvider")
        public Object[][] getData() {
            return new Object[][]{{12,9,21},{45,44,89},{18,9,27}};
        }
        
        
        @Test(dataProvider="calculatorDataProvider")
        public void a_addTest(int firstNumber, int secondNumber, int sum){
            Assert.assertTrue(calculator.add(firstNumber, secondNumber) == sum);
        }
    }
    TestNG test case

    TestNG存在两种参数化方式,其中一种是利用XML的配置文件,这里略过这种方式,可以看到,TestNG的参数化测试非常用户友好和灵活(在XML文件或类内)。 它可以支持许多复杂的数据类型作为参数值

  • 相关阅读:
    Mapreduce实例-Top Key
    Mapreduce实例-分组排重(group by distinct)
    storm0.9.0.1升级安装
    mysql配置文件my.cnf详解
    MYSQL管理之主从同步管理
    一个经典实用的iptables shell脚本
    sed实例精解--例说sed完整版
    常用的主机监控Shell脚本
    Python(九)Tornado web 框架
    缓存、队列(Memcached、redis、RabbitMQ)
  • 原文地址:https://www.cnblogs.com/Seven13G/p/7762226.html
Copyright © 2011-2022 走看看