testng单元测试实例,java+selenium+testNG的测试用例
在每个现代软件包的构建阶段,测试都扮演着核心角色。您首先编写代码,然后在有时间时测试它(或者根本不测试它)的日子已经一去不复返了,因为大多数
现在,几个开发人员意识到有必要采用编码和测试交织的软件方法论,以便尽早发现bug,并在开发过程的开始阶段识别主要风险。
JUnit超越了其他测试框架,促进开发人员理解测试的目的,尤其是单元测试。JUnit凭借着相当简单、实用、严谨的架构,已经能够“感染”一大批开发者。(有关“通过测试感染”的更多信息,请参见
参考资料。)JUnit用户已经了解了一些单元测试的基本规则:
每一段代码都必须经过测试。只要有可能,代码测试必须独立进行(例如,使用类似
模拟等技术)。
软件必须易于测试也就是说,
写的时候,想想测试。
然而,随着开发人员对测试的信任增加,JUnit的简单性和严格性将他们分成了两个对立的派别。一方面,一些人坚信JUnit的简单性是必不可少的,以不断提醒程序员软件也必须保持简单(这被称为KISS原则,代表
保持简单,傻逼);另一方面,有些人认为JUnit不简单而是简化了,所以他们希望从测试框架中获得新的高级功能、更大的灵活性和更强的能力。JUnit的一些特殊特性是为了回应这个群体的一些具体批评而引入的:
由于Java语言的单一继承性,必须对其进行扩展。
TestCase类非常有限。
不能将参数传递给JUnit的测试方法,也不能将参数传递给
设置()和
tearDown()方法传递参数。
执行模型有点奇怪:每次执行一个测试方法,测试类都要重新实例化。在一个复杂的项目中管理不同的测试套件是非常复杂的。
TestNG,TestNG的创造者
的创建者是Cedric Beust,他在Java编程领域非常有名,是EJB 3专家组的成员,其他流行的开源项目(如
EJBGen和Doclipse的创造者)。TestNG是根据Apache软件许可条款发布的,可以从它的网站上下载(参见参考资料中该网站和Cedric网站的链接)。
测试
的新测试框架是为应用程序编写单元测试。TestNG受JUnit启发,同时尽量保持后者的简洁;但是,TestNG
旧框架的大部分限制都被消除了,因此开发人员可以编写更加灵活和强大的测试。因为TestNG借用了Java注释(以及JDK)
5.0简介;有关这个新特性的更多信息,请参阅参考资料),因此本文也可以向您展示如何在真实的生产环境中使用Java语言的这个新特性。
关于代码
为了演示TestNG的用法,我将为这个广泛使用的开源库Jakarta Common Lang(包含一些用于处理和操作字符串、数字和Java对象的有用类)编写一些单元测试。潜在的
在参考资料部分,您可以找到TestNG和Jakarta公共语言库的链接;如果你想在你自己的机器上练习这篇文章,这两篇文章都需要下载。
能
在两个不同的包中获取TestNG:一个包需要JDK 5.0,另一个包与Java语言1.4相关。
版本兼容性。在测试时,它们使用稍微不同的语法:前者使用JDK 5.0符号,而后者使用旧的Javadoc风格符号。本文使用
5.0版,所以在继续阅读本文之前,需要对标记有一个基本的了解;您可以在参考资料中找到关于这个主题的developerWorks参考资料的链接。但是,你应该知道
仅在编译和运行测试时
只需要JDK 5.0,所以你仍然可以用你喜欢的编译器来构建应用程序。实际上,您将使用从Jakarata项目的网站上下载的同一个。
JAR文件来测试Jakarta公共语言库。关于使用Java平台TestNG版的更多细节可以在
TestNG的网站。
最后,点击本文顶部或底部。
代码图标,下载
J-TestNG-sample.zip文件,其中包含一些示例,并演示了如何使用TestNG作为Jakarta Commons Lang
编写单元测试。在里面,你可以找到这里给出的大部分代码,以及一些其他的例子。阅读本文不需要这段代码,但它可以帮助您更深入地理解这里介绍的概念。
返回页首测试开始得很快。
NG的TestNG类是一个普通的老Java对象;您不需要扩展任何特殊的类,也不需要使用任何测试方法的命名约定:您只需要使用注释。
@Test通知这个类的框架的方式是测试。清单1展示了实用程序类。
StringUtils最简单的测试之一。它测试
StringUtils的两种方法:
IsEmpty()方法检测
字符串为空;
Trim()方法来自
删除字符串两端的控制字符。注意,使用了Java指令。
断言以检测错误条件。
清单1。StringUtils类的测试用例
包装测试;
导入com . beust . TestNG . annotations . *;
导入org . Apache . commons . lang . string utils;
公共类StringUtilsTest
{
@测试
public void是Empty()
{
断言string utils . is blank(null);
断言string utils . is blank(“”);
}
@测试
公共空修剪()
{
断言“foo”。equals(string utils . trim( foo );
}
}
但是,在运行测试之前,您必须用一个特殊的XML文件配置TestNG,这个文件通常被命名为testng.xml。这个文件的语法非常简单,如清单2所示。这个文件首先定义了测试套件。
我的测试套件,这个套件只包含一个测试。
首先,该测试由以下人员进行
StringUtilsTest类已完成。
清单2。TestNG的配置文件
!DOCTYPE suite系统 http://beust . com/TestNG/TestNG-1.0 . dtd
套件名称=我的测试套件
测试名称=首次测试
班
class name=tests。StringUtilsTest /
/类别
/测试
/suite如果这个示例testng.xml文件看起来没有用(只有一个测试类),那么好消息是:这实际上是你定义测试套件的时候。
唯一需要写的文件。还记得朱尼特的旧时光吗?那时,套件的定义可能分布在多个文件中:JUnit的
TestSuite、属性文件,当然还有不可或缺的Ant构建文件。使用TestNG,所有必需的数据都集中在testng.xml文件中。不需要额外的。
测试套件和构建文件。
若要运行测试,请使用
c编译该类,然后用下面的命令调用TestNG:
java -ea -classpath。testng.jarcommons-lang-2.0 . jarcom . beust . TestNG . TestNG . XML此处,选项
-ea告诉JVM处理断言(断言失败时抛出异常);运行这个例子只需要两个库,testng.jar和commons-lang-2.0.jar
Com.beust.TestNG.TestNG是TestNG的主类。对于所有那些已经很高兴忘记的人。
和java
对于javac神秘语法的开发者来说,它还提供了一个有用的Ant任务。作为一个例子,清单3展示了本文中发布的示例应用程序的Ant构建文件。请注意听课
Com.beust.testng.TestNGAntTask
测试任务的定义及其在
测试目标中一个相当简单的用法。
清单3。带有TestNG任务的Ant构建文件
项目名称= sample default= test basedir=,
!-编译测试-
路径id=cpath
path element location= TestNG . jar /
path element location= commons-lang-2.0 . jar /
/路径
目标名称=编译
echo message=编译测试/
mkdir dir=classes/
javac debug=true
source= 1.5 classpathref= cpath
srcdir=src destdir=classes/
/目标
!-运行测试-
taskdef name=testng
com.beust.testng.TestNGAntTask
classpathref=cpath/
路径id=runpath
path refid=cpath/
pathelement location=classes/
/路径
目标名称=测试依赖=编译
echo message=正在运行测试/
TestNG fork= yes classpathref= runpath output dir= test-output
文件集目录=src 包含=testng.xml/
jvmarg值=-ea /
/testng
/目标
/项目,例如
如果一切正常,那么您应该在控制台中看到测试结果。此外,TestNG会在当前目录中自动创建一个测试输出。
文件夹,并在其中创建了一个非常好的HTML报表。如果您打开报告并加载index.html,您可以看到类似于图1的页面。
回到顶部来定义测试组
TestNG的另一个有趣的特性是它定义测试组的能力。每个测试方法可以与一个或多个组相关联,但是您可以选择只运行一个测试组。要向测试组添加测试,只需将组指定为
@使用以下语法测试标记的参数:
@Test(groups={tests.string})在这个特定的示例中,您声明标记的方法属于
Tests.string组。因为参数
Groups是一个数组,所以可以指定多个组,组名用逗号分隔。例如,在示例应用程序中,您可以设置
String、Number和boolean创建不同的测试,然后如清单4所示配置TestNG来有选择地运行它们。
清单4。不同组的配置文件
!DOCTYPE suite系统 http://beust . com/TestNG/TestNG-1.0 . dtd
套件名称=我的套件
测试名称=简单示例
组
奔跑
include name=tests.string /
include name=tests.math /
exclude name=tests.boolean/
/运行
/组
班
.在此列出课程.
/类别
/测试
/套件
显然,当运行不同的测试组时,HTML报告可以在单个列表中显示所有的测试,或者在独立的列表中显示每个组的测试,这样可以立即了解问题的来源。
返回顶部配置方法
使用TestNG,不仅可以指定测试方法,还可以使用特殊的注释。
@Configuration指定了类中的其他特定方法。这些方法被称为
配置方法。有四种类型的配置:
清单5展示了一些配置方法的例子。请注意,如果您使用组,那么配置方法也必须属于某个组。此外,这四种类型的配置方法并不相互排斥,因此可以将方法定义为同时属于一种或多种类型的配置方法。(有关示例,请参见
AroundTestMethods()方法)。
清单5。配置方法示例
@ Configuration(beforestclass=true,groups={tests.workflow})
公共void设置()
{
System.out.println(正在初始化.);
}
@ Configuration(after test method=true,beforeTestMethod=true,groups={tests.workflow})
围绕TestMethods()的公共void
{
system . out . println(" Around Test ");
}TestNG中的配置方法是JUnit的。
设置()和
tearDown()方法的增强版;它们的主要目的是为测试创建正确的执行上下文,并在测试用例执行后刷新数据。
返回页首异常检测
使用TestNG,您可以非常简单和容易地检测异常的发生。显然,您可以用JUnit做到这一点,但是正如您在清单6的例子中看到的,使用TestNG的
@ExpectedExceptions注释可以让代码编写变得异常简单。
@ExpectedExceptions批注表明框架可以容忍抛出的
NumberFormatException是异常的,所以不应该视为故障。要查看一行代码中是否抛出了异常,可以直接将其添加到这行代码之后。
断言虚假陈述。这意味着
只有当在指定的行中抛出特定类型的异常时,您才能通过测试。
清单6。使用TestNG进行异常检测
公共类别数字测试
{
@Test(groups={tests.math})
@ expected exceptions(numberformatexception . class)
公共无效测试()
{
numberutils . create double( 12 . 23 . 45 );
断言假;//不应该被调用
}
}
页面顶部的结束语
在本文中,我提供了TestNG的快速实用的介绍,目的是展示如何开始编写单元测试。然而,它不是一个完整的参考手册。TestNG还有许多其他非常有用的有趣特性:
您可以将参数传递给测试方法和配置方法,并且可以用批注或在XML配置文件中声明参数。
您可以在TestNG下的“兼容模式”中运行过去运行良好的Junit测试。
您可以在测试组之间建立依赖关系,并确定它们的执行顺序。
为了理解这个框架的所有潜力,有必要参考TestNG的文档(参见
参考)。
所有这些特性,加上用于定义测试的Java注释,使得整个测试过程更加简单和灵活。编写测试时必须遵循的规则很少;另外,你完全可以自由选择自己喜欢的测试策略。
使用TestNG时最明显的是,这个模板已经是编写单元测试的好选择。而且它与其他库和工具的集成在设计上非常简单,所以它未来的发展会给开发者带来一些有趣的新东西。
返回页首下载
名称大小下载方法j-testng-sample.zip
关于下载方法的HTTP信息资源
您可以参考developerWorks全球网站上的这篇文章。
英文原文。
请在本文的顶部或底部列出
Code图标下载j-testng-sample.zip,其中包含本文讨论的代码。
在项目中
网站下载TestNG。
运行本文的代码需要下载。
雅加达公共图书馆。
如果您不熟悉Java注释,请阅读Brett McLaughlin于2004年9月在developerWorks上发表的两部分系列文章:
在JUnit.org下载JUnit。
马尔科姆戴维斯写的"
用Ant和JUnit进行增量开发”(developerWorks,2000年11月)是一篇很好的文章,解释了如何将JUnit集成到项目中。
埃里克艾伦罗伊米勒在各自的专栏里
Java诊断代码和
编程中经常提到单元测试。
test-driven是一个关于测试驱动开发的文章和资源的综合集合。
了解更多关于各种
开源测试工具。
了解更多关于"
用模拟对象进行单元测试”,Alexander Day Chaffee和William Pietri (developerWorks,2002年11月)。
中记录了许多关于JUnit、单元测试和TestNG的想法
塞德里克贝斯特的博客。
你是否
测试感染?理解这个术语的意思。
请访问。
开发者书店,获取完整的技术书籍列表,包括上百种。
Java相关主题的书籍。
关于作者
Filippo Diotalevi是IBM意大利公司驻米兰的IT专家。他主要是一名J2EE应用程序开发人员。他的兴趣主要是模式、面向方面编程和敏捷方法论。他就是IBM红皮书。
模式:企业内部和企业之间的直接联系的合著者,以及在网站和杂志上发表的一些技术文章的作者,或者
Java集团米兰创始人。是的。
联系filippo.diotalevi@it.ibm.com的菲利普。
来自:IBM开发人员社区
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。