【本系列其他教程正在陆续翻译中,点击分类: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则与之相反。