TestNG和junit的整合
A.junit4采用JunitCore调用执行类。
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class JunitTestSuiteRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure fail : result.getFailures()) {
System.out.println(fail.toString());
}
if (result.wasSuccessful()) {
System.out.println("All tests finished successfully...");
}
}
}
详细代码如下:
org.testng.junit.Junit4TestRunner
/**
* Starts a test run. Analyzes the command line arguments and runs the given
* test suite.
*/
public Result start(final Class testCase, final String... methods) {
try {
JUnitCore core = new JUnitCore();
core.addListener(new RL());
Request r = Request.aClass(testCase);
return core.run(r.filterWith(new Filter() {
@Override
public boolean shouldRun(Description description) {
if (description == null) {
return false;
}
if (methods.length == 0) {
//run everything
return true;
}
for (String m: methods) {
Pattern p = Pattern.compile(m);
if (p.matcher(description.getMethodName()).matches()) {
return true;
}
}
return false;
}
@Override
public String describe() {
return "TestNG method filter";
}
}));
} catch (Throwable t) {
throw new TestNGException("Failure in JUnit mode for class " + testCase.getName(), t);
}
}
B.junit3 采用反射实现调用和执行
org.testng.junit.JUnit3TestRecognizer
public boolean isTest(Class c) {
//class implementing junit.framework.Test with at least one test* method
if (Test.class.isAssignableFrom(c)) {
boolean haveTest = false;
for (Method m : c.getMethods()) {
if (m.getName().startsWith("test")) {
haveTest = true;
break;
}
}
if (haveTest) {
return true;
}
}
try {
//or a class with public static Test suite() method
Method m = c.getDeclaredMethod("suite");
if (Modifier.isPublic(m.getModifiers()) && Modifier.isStatic(m.getModifiers())) {
return m.getReturnType().isAssignableFrom(Test.class);
}
} catch (Throwable t) {
return false;
}
return false;
}
官方Junit转为TestNG文档:
Using Eclipse
The easiest way to convert your JUnit tests to TestNG is to use the Eclipse TestNG plug-in refactoring support. You will find a full description of its features in the Eclipse section.
Asserts
Note that the class org.testng.Assert uses a different argument ordering than the ones used by JUnit. If you are porting code that uses JUnit's asserts, you might want to us a static import of that class:
import static org.testng.AssertJUnit.*;
|
Running JUnit Tests
TestNG can automatically recognize and run JUnit tests, so you can use TestNG as a runner for all your existing tests and write new tests using TestNG.
All you have to do is to put JUnit library on the TestNG classpath, so it can find and use JUnit classes, change your test runner from JUnit to TestNG in Ant and then run TestNG in "mixed" mode. This way you can have all your tests in the same project, even in the same package, and start using TestNG. This approach also allows you to convert your existing JUnit tests to TestNG incrementally.
Example - replacing JUnit Ant task with TestNG one
JUnit version:
< junit dir = "${work.dir}" errorproperty = "tests.failed" failureproperty = "tests.failed" fork = "true" >
|
< batchtest todir = "${build.test.results.dir}" >
|
< fileset dir = "${test.src.dir}" >
|
< include name = "**/*Test.*" />
|
< path path = "${run.test.classpath}" />
|
< propertyref prefix = "test-sys-prop." />
|
< mapper from = "test-sys-prop.*" to = "*" type = "glob" />
|
< jvmarg line = "${run.jvmargs}" />
|
TestNG version:
< taskdef name = "testng" classname = "org.testng.TestNGAntTask" classpath = "${run.test.classpath}" />
|
< fileset id = "mixed.tests" dir = "${test.src.dir}" >
|
< include name = "**/*Test.*" />
|
< testng mode = "mixed" classfilesetref = "mixed.tests" workingDir = "${work.dir}" failureProperty = "tests.failed" outputdir = "${build.test.results.dir}" >
|
< pathelement path = "${build.test.classes.dir}" />
|
< pathelement path = "${run.test.classpath}" />
|
< pathelement path = "${junit.lib}" />
|
< propertyref prefix = "test-sys-prop." />
|
< mapper from = "test-sys-prop.*" to = "*" type = "glob" />
|
< jvmarg line = "${run.jvmargs}" />
|
Related reading
分享到:
相关推荐
尽管JUnit 4引入了注解来提高测试的灵活性,但TestNG早在JUnit 4之前就已采用了注解,并且提供了更多高级特性,使其在大规模测试中更具优势。 JUnit 4的改进主要包括:使用注解(@BeforeClass, @Test等)替代传统的...
TestNG和JUnit是两种广泛使用的Java测试框架,它们在软件质量保证和持续集成流程中扮演着重要角色。本文将深入探讨这两个测试框架的特性和差异,以及为什么TestNG被誉为下一代测试框架。 TestNG是由Cedric Beust...
TestNG和JUnit是两种广泛使用的Java测试框架,它们在软件测试领域扮演着至关重要的角色。本文将对两者进行深入的比较和概要介绍,旨在帮助读者理解它们的相似之处以及如何选择适合自己的测试工具。 首先,TestNG和...
TestNG 是一个强大的自动化测试框架,受到 JUnit 和 NUnit 的启发,但在功能和灵活性上有所增强,特别适合进行单元测试、功能测试、端到端测试和集成测试。它需要 JDK 5 或更高版本来运行。TestNG 的设计目标是为...
Selenium 终极自动化测试环境搭建 一、环境搭建 在搭建 Selenium 终极自动化测试环境时,需要安装 JDK、Eclipse、Junit、...同时,本文还介绍了 Junit 和 TestNG 两种测试框架,以及 Python 在自动化测试中的应用。
在项目 "maven3-junit-spock-testng-mixin-master" 中,开发者可能将这四个工具结合使用,以实现以下目的: - 使用 Maven 进行项目构建和依赖管理。 - 利用 JUnit 对部分代码进行快速的单元测试,尤其是对于那些简单...
标题与描述均提到了"Testing-JUnit-TestNG",这明确指向了软件测试领域中的两个重要的测试框架:JUnit和TestNG。这两个框架在Java开发社区中被广泛使用,用于编写自动化测试用例,以确保代码质量和功能正确性。 ###...
### Selenium+Eclipse+JUnit+TestNG自动化测试学习笔记 #### 一、环境搭建与配置 **1. 安装 JDK** - **版本**: JDK 1.7 - **下载地址**: ...
相较于JUnit,TestNG引入了许多先进的特性,使其更适合大规模的测试项目。 TestNG的核心概念包括: 1. **测试套件(Test Suites)**:测试套件是TestNG中的一个重要组成部分,它可以包含多个测试类或测试配置,...
TestNG是一款功能强大的测试框架,支持多种类型的测试,如单元测试、集成测试、功能测试等,同时它对Junit进行了扩展,支持并行测试和更灵活的测试配置。 中文乱码问题通常发生在Maven执行`mvn test`命令后生成的...
TestNG是一个功能强大的Java测试框架,由Cédric Beust创建,它在JUnit的基础上进行了扩展,提供了更多高级功能,如并行测试、测试分组、配置方法、监听器、报告定制等。TestNG的"testng-6.7.jar"是这个框架的核心库...
### TestNG单元测试学习总结 #### 一、TestNG框架简介 **1.1 概念** TestNG(Test Next Generation)是一个高级测试框架,它继承了JUnit与NUnit的优点,并在此基础上添加了许多新的功能。TestNG是一个开源的、...
为了解决这个问题,"junit-dataprovider"应运而生,它为JUnit添加了一个类似于TestNG的data provider功能,使得JUnit测试更加灵活和强大。 1. **junit-dataprovider简介** "junit-dataprovider"是一个JUnit扩展,...
- **TestNG**: TestNG是一个基于JUnit和NUnit思想设计的新一代测试框架,提供了更丰富的特性和灵活性,包括但不限于并行测试执行、灵活的依赖管理、更强大的参数化支持等。TestNG相比JUnit在测试控制、重复执行、...
在TestNG中,测试是通过注解(Annotations)来实现的,注解是Java 5.0中引入的一个新特性,它能够帮助开发人员在代码中添加元数据。TestNG支持的注解非常多,例如用于标记测试方法的@Test、用于分组测试的@Groups...
在Eclipse中使用TestNG进行测试,你需要创建一个新的TestNG类,通常继承自`org.testng.annotations.Test`注解的类。以下是一个简单的例子: ```java import org.testng.Assert; import org.testng.annotations.Test...
TestNG是Java编程环境中一个强大的测试框架,与JUnit相比,它提供了更丰富的功能,如支持多种测试类型、灵活的测试配置、并发测试等。Eclipse是广受欢迎的Java集成开发环境(IDE),它允许开发者通过插件来扩展其...
### TestNG 学习笔记概览 #### 一、JUnit 的局限性与 TestNG 的优势 ##### JUnit 缺陷概述 - **最初的用途限制**:JUnit 最初被设计为一个仅适用于单元测试的框架,但随着时间的发展,其功能已扩展至支持多种类型...
JUnit的架构主要由三个部分组成:Test Runner、Test Case和Assertion。Test Runner是JUnit的执行引擎,负责执行测试用例。Test Case是测试用例的集合,每个测试用例都包含多个测试方法。Assertion是JUnit中的断言...