转载自:http://blog.csdn.net/bigapplestar/article/details/7300137

今天突然收到通知,统一改用TestNG写测试用例,开始查这方面的资料,学习一下。

TestNG需要有自己的配置文件,最方便的办法即是从eclipse上直接下载一下插件。直接下载跟插件下载的地址都可以在http://testng.org/doc/download.html上找到。

http://www.mkyong.com/tutorials/testng-tutorials/ 这个教程写得很好,挺通俗易懂的。

大致摘抄记录一下:

1. 基本用法。

[java] view
plain
copy

  1. import java.util.*;
  2. import org.testng.Assert;
  3. import org.testng.annotations.*;
  4. public class TestNGTest1 {
  5. private Collection collection;
  6. @BeforeClass
  7. public void oneTimeSetUp() {
  8. // one-time initialization code
  9. System.out.println("@BeforeClass - oneTimeSetUp");
  10. }
  11. @AfterClass
  12. public void oneTimeTearDown() {
  13. // one-time cleanup code
  14. System.out.println("@AfterClass - oneTimeTearDown");
  15. }
  16. @BeforeMethod
  17. public void setUp() {
  18. collection = new ArrayList();
  19. System.out.println("@BeforeMethod - setUp");
  20. }
  21. @AfterMethod
  22. public void tearDown() {
  23. collection.clear();
  24. System.out.println("@AfterMethod - tearDown");
  25. }
  26. @Test
  27. public void testEmptyCollection() {
  28. Assert.assertEquals(collection.isEmpty(),true);
  29. System.out.println("@Test - testEmptyCollection");
  30. }
  31. @Test
  32. public void testOneItemCollection() {
  33. collection.add("itemA");
  34. Assert.assertEquals(collection.size(),1);
  35. System.out.println("@Test - testOneItemCollection");
  36. }
  37. }

@BeforeClass @AfterClass 等这些从字面上都可以很好理解,Class是整个测试类运行时的前后,而Method则在每个测试方法被调用前都会被调用。

所以这一段代码执行后的结果如下:

[java] view
plain
copy

  1. @BeforeClass - oneTimeSetUp
  2. @BeforeMethod - setUp
  3. @Test - testEmptyCollection
  4. @AfterMethod - tearDown
  5. @BeforeMethod - setUp
  6. @Test - testOneItemCollection
  7. @AfterMethod - tearDown
  8. @AfterClass - oneTimeTearDown
  9. PASSED: testEmptyCollection
  10. PASSED: testOneItemCollection

2.测试预期的异常

可以检测某一方法检测到某一异常时是否能按预期地抛出。

[java] view
plain
copy

  1. import org.testng.annotations.*;
  2. /**
  3. * TestNG Expected Exception Test
  4. * @author mkyong
  5. *
  6. */
  7. public class TestNGTest2 {
  8. @Test(expectedExceptions = ArithmeticException.class)
  9. public void divisionWithException() {
  10. int i = 1/0;
  11. }
  12. }

在这一示例中,divisionWithException()将会抛出一个ArithmetricException的预期异常,这个单元测试也将顺利通过。

3. 忽略某一测试方法

TestNG是通过直接在方法上加标注的方式来进行测试,而这里也可以设置某个测试方法不工作。可以通过如下方式:

[java] view
plain
copy

  1. import org.testng.annotations.*;
  2. /**
  3. * TestNG Ignore Test
  4. * @author mkyong
  5. *
  6. */
  7. public class TestNGTest3 {
  8. @Test(enabled=false)
  9. public void divisionWithException() {
  10. System.out.println("Method is not ready yet");
  11. }
  12. }

4. 时限测试

可以设置一个特定时长的限制(以毫秒ms为单位),一旦测试的内容运行超过了该 时间长度,那么将会终止,同时标记为failed。

[java] view
plain
copy

  1. import org.testng.annotations.*;
  2. /**
  3. * TestNG TimeOut Test
  4. * @author mkyong
  5. *
  6. */
  7. public class TestNGTest4 {
  8. @Test(timeOut = 1000)
  9. public void infinity() {
  10. while (true);
  11. }
  12. }

运行后将会有如下的提示:

[java] view
plain
copy

  1. FAILED: infinity
  2. org.testng.internal.thread.ThreadTimeoutException:
  3. Method public void TestNGTest4.infinity() didn't finish within the time-out 1000
  4. ... Removed 18 stack frames

5. 测试套件(Suite Test)

即是将一些单元测试用例绑定并一起运行。定义suite test是在xml文件中,参见如下文件,表示将TestNG1和TestNG2一起执行。

[html] view
plain
copy

  1. <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
  2. <suite name="My test suite">
  3. <test name="testing">
  4. <classes>
  5. <class name="TestNG1" />
  6. <class name="TestNG2" />
  7. </classes>
  8. </test>
  9. </suite>

6. 依赖测试(Dependency Test)

这也可以用于解决如何决定一个测试类中各测试方法调用顺序的问题,可以指定某一个方法依赖于另一个方法的预先执行。

[java] view
plain
copy

  1. import org.testng.annotations.*;
  2. /**
  3. * TestNG Dependency Test
  4. * @author mkyong
  5. *
  6. */
  7. public class TestNGTest7 {
  8. @Test
  9. public void method1() {
  10. System.out.println("This is method 1");
  11. }
  12. @Test(dependsOnMethods={"method1"})
  13. public void method2() {
  14. System.out.println("This is method 2");
  15. }
  16. }

运行的结果为:

[java] view
plain
copy

  1. PASSED: method1
  2. PASSED: method2

method仅当在method1方法执行成功的前提下才会运行。

这里翻译得顺序有些调整,关于参数传递的6,7小节下次再翻译,还没有具体测试过,同时也还有一些疑问,若传递的是数据,类等,试试再来整理出来了。

TestNG指南的更多相关文章

  1. ☕【Java技术指南】「TestNG专题」单元测试框架之TestNG使用教程指南(上)

    TestNG介绍 TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便. 详细使用说明请参考官方链接:https://testng ...

  2. Spring、Spring Boot和TestNG测试指南 - 使用Spring Boot Testing工具

    Github地址 前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测试Spring Boot项目. 在 ...

  3. [翻译]现代java开发指南 第二部分

    现代java开发指南 第二部分 第二部分:部署.监控 & 管理,性能分析和基准测试 第一部分,第二部分 =================== 欢迎来到现代 Java 开发指南第二部分.在第一 ...

  4. JUnit5 快速指南

    JUnit5 快速指南 version: junit5 1. 安装 2. JUnit 注解 3. 编写单元测试 3.1. 基本的单元测试类和方法 3.2. 定制测试类和方法的显示名称 3.3. 断言( ...

  5. Self20171218_Eclipse+TestNg HelloWorld

    作为一个经典的入门例子,这里展示如何开始使用TestNG单元测试框架. 使用的工具 : TestNG 6.8.7 Maven 3 Eclipse IDE TestNG下载并安装 从这里 http:// ...

  6. 《gradle 用户指南中文版》目录

    gradle 用户指南 版权所有©2007-2017 Hans Dockter,Adam Murdoch只要您不对这些副本收取任何费用,并且进一步规定,每个副本都包含本版权声明,无论是以印刷版还是电子 ...

  7. TestNG Hello World入门示例

    https://www.yiibai.com/testng/hello-world-example.html https://www.yiibai.com/testng/ 作为一个经典的入门例子,这里 ...

  8. maven相关说明,以及使用Testng相关

    配置Apache Maven Apache Maven使用本身的配置和建立的项目位于许多地方: MAVEN_OPTS环境变量: 该变量包含用于启动运行Maven的JVM的参数,可用于向Maven提供其 ...

  9. dubbo开发者指南

    开发者指南 参与 流程 任务 版本管理 源码构建 框架设计 整体设计 模块分包 依赖关系 调用链 暴露服务时序 引用服务时序 领域模型 基本原则 扩展点加载 扩展点配置 扩展点自动包装 扩展点自动装配 ...

随机推荐

  1. 使用Node.js 搭建http服务器 http-server 模块

    1. 安装 http-server 模块 npm install http-server -g   全局安装 2.在需要的文件夹   启动 http-server  默认的端口是8080    可以使 ...

  2. 【探路者】团队Alpha周贡献分数分配结果

    经本组成员商议,根据老师提供的分数,(每人携带10分进入团队,[探路者]团队7人,共计35分). 本周每位同学携带10分进入组内,7人共计70分.分数公布如下: 吴雨丹 15分 贾雅杰 12分 蔺依铭 ...

  3. C++:默认初始化

    一.什么是默认初始化 默认初始化,顾名思义,即为在定义变量时如果没有为其指定初始化值,则该变量会被C++编译器赋予默认的值.而变量被赋予的默认值到底是什么,则取决于变量的数据类型和变量的定义位置. 二 ...

  4. 福大软工1816 - 404 Note Found选题报告

    目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...

  5. 周总结<4>

    经过了一周的学习,我们在html以及C语言方面又有的新的知识点的学习. html 自习表格,函数等 C语言 哈弗曼编码 Html案例: 一. <!DOCTYPE html PUBLIC &quo ...

  6. [codecademy]fonts in css

    Great job! You learned how to style an important aspect of the user experience: fonts! Let's review ...

  7. 按照事务类型分析 DB2 事物的性能

    概述 事务是数据库系统中的核心概念之一.作为数据库系统的逻辑工作单元(Unit of Work),事务必须具有四个属性,即原子性.一致性.隔离性和持久性(ACID).数据库系统往往通过锁机制保证事务的 ...

  8. Java第一次笔记

  9. ant 安装及基础教程 !

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下   一.概述 ant 是一个将软件编译.测试.部署等步骤联系在 ...

  10. mysql项目路径URL编码

    jdbc_url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncodi ...