TestNG Annotations示例

2021-08-27 15:29:07 浏览数 (1)

【本系列其他教程正在陆续翻译中,点击分类:TestNG进行查看。】

【翻译 by 明明如月 QQ 605283073】

原文地址:http://websystique.com/java/testing/testng-annotations-example/

上一篇:TestNG Hello World

下一篇:TestNG Groups 例子

本文讲述TestNG的如下 annotations (注解):@Test,@BeforeMethod@AfterMethod@BeforeClass@AfterClass@BeforeGroups,@AfterGroups@BeforeSuite@AfterSuite@BeforeTest & @AfterTest

以后的文章将讲述其他的一些比较流行的 注解@Parameters & @DataProvider。

上一篇文章已经介绍了TestNG的基本使用方法。本文我们将使用注解,并且循序渐进。

----------------------------------------------------------

TestNG Annotations根据使用的频率经常可进行如下划分:

1) 基本注解: 最常见几种注解

  • @Test, @BeforeClass, @AfterClass, @BeforeMethod, @AfterMethod

2)高级的注解:针对特别的 情况 设置等的注解

  • 组注解 : @BeforeGroups, @AfterGroups
  • 组件相关的注解 : @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest

-----------------------------------

基础注解

先写个将用来被测试的类:

代码语言:javascript复制
package com.websystique.testng;
 
public class Calculator {
     
    public double add(double a, double b){
        return a b;
    }
     
    public double subtract(double a, double b){
        return a-b;
    }
     
    public double multiply(double a, double b){
        return a*b;
    }
     
}

下面对每一个方法进行测试:

代码语言:javascript复制
package com.websystique.testng;
 
import java.lang.reflect.Method;
 
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
 
public class TestCalculator {
 
    Calculator calculator;
     
    @BeforeClass
    public void beforeClass(){
        //Ideal place to perform some setup which is shared among all tests.
        //E.g. Initializing DB connection, setting environment properties
        System.out.println("@BeforeClass: I run only once, before first test start.");
        calculator = new Calculator();
    }
 
    @AfterClass
    public void afterClass(){
        //Ideal place to perform some cleanup of setup which is shared among all tests.
        System.out.println("@AfterClass: I run only once, after all tests have been done.n");
        calculator = null;
    }
 
    @BeforeMethod
    public void beforeEachTestMethod(Method method){//Parameter are optional
        //May perform some initialization/setup before each test.
        //E.g. Initializing User whose properties may be altered by actual @Test
        System.out.println("n@BeforeMethod: I run before each test method. Test to be executed is : " method.getName());
    }
     
    @AfterMethod
    public void afterEachTestMethod(Method method){//Parameter are optional
        //May perform cleanup of initialization/setup after each test.
        System.out.println("@AfterMethod: I run after each test method. Test just executed is : " method.getName() "n");
    }
 
    @Test
    public void testAdd(){
        System.out.println("@Test add");
        Assert.assertEquals(calculator.add(2, 3), 5.0);
    }
     
    @Test
    public void testSubtract(){
        System.out.println("@Test subtract");
        Assert.assertTrue(calculator.subtract(5, 3) > 1, "Subtract test failed");
    }
     
    @Test
    public void testMultiply(){
        System.out.println("@Test multiply");
        Assert.assertEquals(calculator.multiply(5, 3) , 15.0);
    }
     
}

根据上一篇文章所介绍的 采用 mvn clean test or TestNG eclipse 插件进行测试

下面是测试结果:

代码语言:javascript复制
@BeforeClass: I run only once, before first test start.
 
@BeforeMethod: I run before each test method. Test to be executed is : testAdd
@Test add
@AfterMethod: I run after each test method. Test just executed is : testAdd
 
 
@BeforeMethod: I run before each test method. Test to be executed is : testMultiply
@Test multiply
@AfterMethod: I run after each test method. Test just executed is : testMultiply
 
 
@BeforeMethod: I run before each test method. Test to be executed is : testSubtract
@Test subtract
@AfterMethod: I run after each test method. Test just executed is : testSubtract
 
@AfterClass: I run only once, after all tests have been done.
 
PASSED: testAdd
PASSED: testMultiply
PASSED: testSubtract
 
===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================
 
 
===============================================
Default suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================
@BeforeClass, @AfterClass

@BeforeClass 只会在第一个测试方法执行前被执行一次。这个比较适合对所有测试方法的配置初始化。

本例中 我们再@BeforeClass 注解的方法里创建了一个calculator实例。

@AfterClass 将在所有的测试方法执行后只被调用一次。

@BeforeMethod, @AfterMethod

@BeforeMethod 将在每一个单元测试执行前被执行一次。

于此相似的是@AfterMethod 方法将在每个单元测试方法执行后被执行一次。

@Test

在要测试的方法上写此注解。

-----------------------------------

高级注解

1)组注解:

TestNG 允许我们将多个测试组成一组进行测试。

通过分组,对一个组进行测试时其他分组的测试将被忽略。

多个测试可以属于一个组,一个测试也可以成为多个组的一部分。

@BeforeGroups, @AfterGroups

带@BeforeGroups注解的方法将在本组内任何测试方法执行前被执行一次。

和此类似的是带@AfterGroups 注解的方法将在本组内任何测试方法执行后被执行一次。

下一篇文章将讲述 TestNG Groups例子

2) 套件注解:

使用 TestNG的每个测试方法都是套件的一部分。

在TestNG中一个套件通过一个通常命名为testng.xml的XML文件表示。

 标签是此xml的第一个标签,代表一个套件,它里面可以包含

标签。每一个标签相应的也可能含有一个或者多个。

,  标签。

@BeforeSuite, @AfterSuite

@BeforeSuite

注解的方法将在套件内什么的任何测试方法执行前被执行一次。

这比较适合设置或者初始化多个分组共有的环境。

 @AfterSuite

注解的方法将在套件内什么的任何测试方法执行后被执行一次。

这比较适合设置或者初始化多个分组共有的环境。

@BeforeTest, @AfterTest

@BeforeTest将在 带有标签的任何方法执行之前执行一次。

@AfterTest则与之相反。

0 人点赞