`
longgangbai
  • 浏览: 7330352 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

TestNG简单的学习(八)TestNG Annotation Transformers 的使用

阅读更多

TestNG官方网站:

http://testng.org/doc/documentation-main.html

 

 

5.15 - Annotation Transformers
TestNG allows you to modify the content of all the annotations at runtime. This is especially useful if the annotations in the source code are right most of the time, but there are a few situations where you'd like to override their value.
In order to achieve this, you need to use an Annotation Transformer.

An Annotation Transformer is a class that implements the following interface:

view sourceprint?public interface IAnnotationTransformer { 

  

  /** 

   * This method will be invoked by TestNG to give you a chance 

   * to modify a TestNG annotation read from your test classes. 

   * You can change the values you need by calling any of the 

   * setters on the ITest interface. 

   *  

   * Note that only one of the three parameters testClass, 

   * testConstructor and testMethod will be non-null. 

   *  

   * @param annotation The annotation that was read from your 

   * test class. 

   * @param testClass If the annotation was found on a class, this 

   * parameter represents this class (null otherwise). 

   * @param testConstructor If the annotation was found on a constructor, 

   * this parameter represents this constructor (null otherwise). 

   * @param testMethod If the annotation was found on a method, 

   * this parameter represents this method (null otherwise). 

   */

  public void transform(ITest annotation, Class testClass, 

      Constructor testConstructor, Method testMethod); 

}
Like all the other TestNG listeners, you can specify this class either on the command line or with ant:

view sourceprint?java org.testng.TestNG -listener MyTransformer testng.xml
or programmatically:

view sourceprint?TestNG tng = new TestNG(); 

tng.setAnnotationTransformer(new MyTransformer()); 

// ...
When the method transform() is invoked, you can call any of the setters on the ITest test parameter to alter its value before TestNG proceeds further.
For example, here is how you would override the attribute invocationCount but only on the test method invoke() of one of your test classes:

view sourceprint?public class MyTransformer implements IAnnotationTransformer { 

  public void transform(ITest annotation, Class testClass, 

      Constructor testConstructor, Method testMethod) 

  { 

    if ("invoke".equals(testMethod.getName())) { 

      annotation.setInvocationCount(5); 

    } 

  } 

}
IAnnotationTransformer only lets you modify a @Test annotation. If you need to modify another TestNG annotation (a configuration annotation, @Factory or @DataProvider), use an IAnnotationTransformer2.

 

 

 
package com.easyway.testng.junit;

import org.testng.annotations.Test;


/**
 * @author longgangbai
 * 2013-11-29  下午4:12:17
 *
 */
public class MyTransferTest {
	@Test
	public void test1() { 
		System.out.println("=================test1=============");
	}  

	   
    
	@Test
	public void test2() {  
		System.out.println("=================test2=============");
	} 

}
package com.easyway.testng.junit;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import org.testng.IAnnotationTransformer;
import org.testng.annotations.ITestAnnotation;

/**
 * @author longgangbai 2013-11-29 下午4:18:34
 * 
 */
public class MyTransformer implements IAnnotationTransformer {

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.testng.IAnnotationTransformer#transform(org.testng.annotations.
	 * ITestAnnotation, java.lang.Class, java.lang.reflect.Constructor,
	 * java.lang.reflect.Method)
	 */
	@SuppressWarnings("rawtypes")
	@Override
	public void transform(ITestAnnotation annotation, Class testClass,
			Constructor testConstructor, Method testMethod) {
		System.out.println(" MyTransformer  "+testMethod);
		if ("test1".equals(testMethod.getName())) {
			annotation.setInvocationCount(5);
		}

	}

}

  

 

 

package com.easyway.testng.junit;

import org.testng.TestNG;

/**
 * @author longgangbai
 * 2013-11-29  下午4:20:51
 *
 */
public class MyTransformerTestMain {

	public static void main(String[] args) {
		TestNG tng = new TestNG();  
		tng.setAnnotationTransformer(new MyTransformer());  
		tng.setTestClasses(new Class[]{MyTransferTest.class});
		tng.run();

	}
}

 

分享到:
评论

相关推荐

    TestNG中文手册学习笔记

    本教程的目标读者是希望学习 TestNG 的软件专业人员,要求读者具备基本的 Java 编程知识、文本编辑器的使用经验以及对软件开发和测试流程的理解。TestNG 相较于 JUnit,克服了如下的局限性: 1. 初始设计仅针对单元...

    testng-xslt-1.1.2.zip

    TestNG XSLT 1.1.2 是一个专门针对TestNG测试框架的扩展,它提供了将TestNG的测试结果转换为易于阅读和分析的XSLT格式的能力。这个压缩包文件“testng-xslt-1.1.2.zip”包含了这个扩展的源代码、文档以及可能的库...

    testNG单元测试学习总结

    ### TestNG单元测试学习总结 #### 一、TestNG框架简介 **1.1 概念** TestNG(Test Next Generation)是一个高级测试框架,它继承了JUnit与NUnit的优点,并在此基础上添加了许多新的功能。TestNG是一个开源的、...

    testng测试报告模板BeautifulReport.7z

    通常,它会指导用户如何配置TestNG以使用定制的模板,可能包括XML配置文件的设置、类路径的指定等。详细阅读这份说明是理解并正确应用模板的关键。 3. **testNGpara.xml**:这可能是TestNG的测试配置文件,用于定义...

    TestNG框架使用

    TestNG框架使用详解 TestNG是一款强大的测试框架,它提供了比JUnit更丰富的功能,尤其在并行测试、分组测试、依赖测试等方面表现突出。这篇博文将深入探讨如何使用TestNG进行单元测试和集成测试。 1. **TestNG基本...

    Testng JAR包及教程

    在Eclipse中使用TestNG进行测试,你需要创建一个新的TestNG类,通常继承自`org.testng.annotations.Test`注解的类。以下是一个简单的例子: ```java import org.testng.Assert; import org.testng.annotations.Test...

    testng-6.7.jar TestNG依赖包

    `testng-6.7-sources.jar`文件则包含了TestNG 6.7版本的源代码,这对于开发者来说非常有价值,因为可以直接查看源码理解内部工作原理,方便调试和学习。 总的来说,TestNG是一个强大且灵活的测试框架,对于Java开发...

    testng-6.9.4和testng-6.8.8.zip

    TestNG是Java编程语言中的一款强大的自动化测试框架,与JUnit和Selenium等工具配合使用,为软件测试提供了全面且灵活的解决方案。TestNG由Cédric Beust创建,旨在提高测试效率并支持更复杂的测试场景,如并发测试、...

    eclipse-testng离线包

    综上所述,"eclipse-testng离线包"是为了在Eclipse中便捷地使用和管理TestNG测试框架而提供的离线安装资源,包含了Eclipse与TestNG集成所需的所有组件,帮助开发者高效地进行单元测试、集成测试和功能测试。

    testng官方文档及使用图解.rar

    TestNG是一款功能强大的Java测试框架,它以JUnit和NUnit为灵感来源,但引入了许多增强功能,使得自动化测试更加高效和灵活。...通过深入学习和熟练运用TestNG,可以构建稳定、高效的自动化测试方案。

    TestNG离线安装文件 site

    TestNG是一种广泛使用的Java测试框架,它为开发者和测试工程师提供了功能强大且灵活的测试解决方案。这个"TestNG离线安装文件site"包含了在没有网络连接的情况下为Eclipse集成TestNG环境所需的所有组件,特别适合...

    TestNG学习笔记

    - 上述示例展示了如何使用 TestNG 编写一个简单的单元测试案例。 - `@Test` 注解用来标记这是一个测试方法。 - `RandomEmailGenerator` 类实现了生成随机邮箱地址的功能,虽然这里的实现并不随机,仅为演示目的。 - ...

    TestNG教程.pdf

    TestNG(Testing New Generation)是一个开源的自动...通过利用注解来定义测试和分组测试,使用TestNG的运行测试功能,以及生成详细的测试报告,TestNG帮助测试团队提高了测试的效率和质量,进而提升了软件产品的质量。

    testng.zip离线安装

    TestNG是一款功能强大的Java测试框架,它扩展...通过离线安装TestNG,开发者可以避免因网络问题而无法使用这个强大的测试工具。离线安装不仅适用于个人开发,对于那些网络受限的企业环境,也是一项非常实用的解决方案。

    testNG集成spring

    - **`@Resource`**(来自`javax.annotation`包):如果项目中已经包含了JSR-250规范,则可以使用此注解来进行依赖注入。 - **`@PersistenceContext`**(来自`javax.persistence`包):如果项目使用了Java ...

    TestNG-离线安装包

    TestNG-6.9离线安装包,下载zip解压后,直接拷贝到eclipse下的dropins目录下即可。重启eclipse,TestNG插件即安装成功。重启eclipse会自动安装TestNG插件,所以启动时间较长,请耐心等待。大概3-5min左右。

    TestNG教程

    TestNG 是一个强大的自动化测试框架,广泛应用于Java应用程序的单元测试、集成测试和端到端测试。它由Cédric Beust创建,旨在提供比JUnit更...通过学习和熟练使用TestNG,你可以有效地提高测试效率,保证软件质量。

    TestNG-6.3 测试框架

    TestNG是一款功能强大的自动化测试框架,相较于JUnit,它提供了更多的特性和灵活性,...对于正在学习和使用TestNG的开发者来说,深入理解并熟练运用这些特性,无疑会提升他们的测试技能,为项目的质量保障贡献力量。

    TestNG安装包

    让我们调用使用testng.xml文件。创建一个XML文件名称testng.xml C:\ > TestNG_WORKSPACE 执行测试用例(s) <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > </suite> 第7步:检查结果 ...

Global site tag (gtag.js) - Google Analytics