单元测试之TestNG

TestNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便。
TestNG是一个开源自动化测试框架;TestNG表示下一代。 TestNG是类似于JUnit(特别是JUnit 4),但它不是一个JUnit扩展。它的灵感来源于JUnit。它的目的是优于JUnit的,尤其是当测试集成的类。 TestNG的创造者是Cedric Beust(塞德里克·博伊斯特)
TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义的测试,它也可以告诉你如何使用这个新功能在真实的Java语言生产环境中。

官网:http://testng.org/doc/index.html

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

一、特点
1.注解
2.TestNG使用Java和面向对象的功能
3.支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)
4.独立的编译时间测试代码运行时配置/数据信息
5.灵活的运行时配置
6.主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
7.支持依赖测试方法,并行测试,负载测试,局部故障
8.灵活的插件API

9.支持多线程测试

二、注解

TestNG的支持列表中的注解:

注解 描述
@Before Suite 注解的方法将只运行一次,运行所有测试前此套件中。
@AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后。
@BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用。
@AfterClass 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
@BeforeTest 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。
@AfterTest 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。
@BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@AfterMethod 被注释的方法将被运行后,每个测试方法。
@DataProvider
标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@Parameters 介绍如何将参数传递给@Test方法。
@Test 标记一个类或方法作为测试的一部分。@Test(enabled = false)禁用此测试案例。

三、执行测试用例

使用TestNG类执行测试用例。这个类的主入口点在TestNG的框架运行测试。用户可以创建自己的TestNG的对象,并调用它以许多不同的方式:
1.在现有的testng.xml
2.合成testng.xml,完全从Java创建
3.直接设定测试类
您还可以定义哪些群体包括或排除,分配参数,命令行参数:

-d outputdir: 指定输出目录
-testclass class_name: 指定了一个或多个类名
-testjar jar_name: 指定的jar包含测试
-sourcedir src1;src2: ; 分隔源目录列表(只有当使用的javadoc注释)
-target
-groups
-testrunfactory
-listener

四、测试实例
1.TestNG的几种不同的方法可以被调用:
1)testng.xml文件
2)ant
3)命令行
2.编写TestNG测试基本上包括以下步骤:
1)测试和编写业务逻辑,在代码中插入TestNG的注解..
2)添加一个testng.xml文件或build.xml中在测试信息(例如类名,您想要运行的组,等..)

3)运行 TestNG.

引入依赖:

<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>6.8.5</version>
		</dependency>

测试类:

package cn.slimsmart.unit.test.demo.testng;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestNGTest {
	
	@Test
	public void testEquals() {
		String str = "abc";
		Assert.assertEquals("abc", str);
	}
	
	@Test
	public void testAdd() {
		int a = 1+3;
		Assert.assertTrue(a==4);
	}
}
testng.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite">
  <test name="test">
    <classes>
       <class name="cn.slimsmart.unit.test.demo.testng.TestNGTest"/>
    </classes>
  </test>
</suite>
1.suite代表一个XML文件。它可以包含一个或多个测试,并被定义由<suite>标记,属性

属性 描述
name 此套件的名称。这是一个强制性的属性。
verbose 这个运行级别或冗长。
parallel 由TestNG 运行不同的线程来运行此套件。
thread-count 使用的线程数,如果启用并行模式(忽略其他方式)。
annotations 在测试中使用注释的类型。
time-out 默认的超时时间,将用于本次测试中发现的所有测试方法。
2.test代表一个测试,并可以包含一个或多个TestNG的类

可以添加junit="true",让测试用例支持junit
3.class代表一个TestNG的类是一个Java类,它包含至少一个TestNG的注解。它可以包含一个或多个测试方法。

运行TestNG,安装eclipse插件运行,

参考:http://www.blogjava.net/qileilove/archive/2014/09/02/417593.html

参考文章:

1.TestNG教程

2.TestNG官方文档中文版

3.testng入门教程

你可能感兴趣的:(单元测试,TestNG)