【本系列其他教程正在陆续翻译中,点击分类:TestNG进行查看。】
【翻译 by 明明如月 QQ 605283073】
原文地址:http://websystique.com/java/testing/testng-annotations-example/
下一篇: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
- 组注解 : @BeforeGroups, @AfterGroups
- 组件相关的注解 : @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest
基础注解
先写个将用来被测试的类:
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;
}
}
下面对每一个方法进行测试:
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 插件进行测试
下面是测试结果:
@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)组注解:
@BeforeGroups, @AfterGroups
带@BeforeGroups注解的方法将在本组内任何测试方法执行前被执行一次。
和此类似的是带@AfterGroups 注解的方法将在本组内任何测试方法执行后被执行一次。
下一篇文章将讲述 TestNG Groups例子