下边表中总结了JUnit,TestNG的支持YAML作为钦点的套件文件的另后生可畏种方式

图片 2

图片 1

listeners=”org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter”

Maven 2

Maven2 本身就支持 TestNG
而无需下载任何额外的插件(除了TestNG自己)。建议您使用2.4或以上版本的Surefire插件(这是在近期所有的Maven版本的情况下)。。你可以参考这里
Surefire网站
,这里是 TestNG
特别指南。

指定你的pom.xml
在你的项目中依赖应该如下所示:

<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.1.1</version>
  <scope>test</scope>
</dependency>

报告样例
使用TestNG
surefire报告可以看这里

7.依赖性测试

“参数化测试”表示方法是依赖性测试,它将在所需方法之前执行。
如果依赖方法失败,则所有后续测试将会被跳过,不会被标记为失败。

JUnit 4

JUnit框架着重于测试隔离; 目前它不支持此功能。

TestNG

它使用“dependOnMethods”来实现依赖测试如下 –

@Test
public void method1() {
   System.out.println("This is method 1");
}

@Test(dependsOnMethods={"method1"})
public void method2() {
    System.out.println("This is method 2");
}

method2()”只有在“method1()”运行成功的情况下才会执行,否则“method2()”将跳过测试。

Cédric Beust 发布了 TestNG 6.0, 包含对 Eclipse TestNG plug-in
的改进。本次发次包含两个重要的特性,其一可以像 使用XML一样使用YAML来指定
test suite。 JSON 也曾被 考虑过 但最终 YAML 胜出,它不必使用quot;quot;
来指定字符值,并对人设计,而不是机器。
两种格式都比较适合复制粘贴代码,但它不必考虑开始闭合标签,也不需要XML那样的
标志符来注释。另外添加了对 Guice 的支持,用于提供实例注入。Guice
是一种可裁剪的DI框架,它支持 JSR-330 @Inject
用于在运行提供实例。更多信息请参考文档。为了让 JUnit 3.x 到
4.x升级更简单,Eclipse plug-in提供一种方法将 JUnit 转换成
TestNG。此外,Eclipse plug-in支持将XML格式转换成较新的 YAML格式。Eclipse
plug-in可以通过 update site 进行更新。下载地址:

       failureproperty=”test.failed”>    

7 – YAML

TestNG的支持YAML作为指定的套件文件的另一种方法。例如,下面的XML文件:

<suite name="SingleSuite" verbose="2" thread-count="4">

  <parameter name="n" value="42" />

  <test name="Regression2">
    <groups>
      <run>
        <exclude name="broken" />
      </run>
    </groups>

    <classes>
      <class name="test.listeners.ResultEndMillisTest" />
    </classes>
  </test>
</suite>

name: SingleSuite
threadCount: 4
parameters: { n: 42 }

tests:
  - name: Regression2
    parameters: { count: 10 }
    excludedGroups: [ broken ]
    classes:
      - test.listeners.ResultEndMillisTest

这里是TestNG的自己的一套文件,YAML的对应的版本。

您可能会发现YAML文件格式更容易阅读和维护。
YAML文件也Eclipse插件的插件认可。您可以在这篇博客文章找到有关YAML和TestNG更详细的信息。

结论

在考虑所有功能比较之后,建议使用TestNG作为Java项目的核心单元测试框架,因为TestNG在参数化测试,依赖测试和套件测试(分组概念)方面更加突出。
TestNG用于高级测试和复杂集成测试。 它的灵活性对于大型测试套件尤其有用。
此外,TestNG还涵盖了整个核心的JUnit4功能。这样说来,好像也没有理由使用JUnit了。

<xmlfileset dir=”${suite}”>

Maven TestNG 原型 (Martin Gilday)

Martin Gilday 已经为 Maven2
用户添加了新的原型,使其更容易使用TestNG。你可以在他的blog here
中找到更多内容。 但是基本的配置我已经在下面列出来了。

要创建一个使用原型的项目,你只要简单的制定我的代码库和原型id。

mvn archetype:create -DgroupId=org.martingilday -DartifactId=test1 -DarchetypeGroupId=org.martingilday -DarchetypeArtifactId=testng-archetype
  -DarchetypeVersion=1.0-SNAPSHOT -DremoteRepositories=http://www.martingilday.org/repository/

当然了,你可以替换为自己的groudIdartifactId

5. 套件测试

“套件测试”是指捆绑几个单元测试并一起运行。 此功能在JUnit
4和TestNG中都可实现。 然而,两者都使用非常不同的方法来实现它。

JUnit 4

“@RunWith”和“@Suite”用于运行套件测试。下面的类代码表示在JunitTest5执行之后,单元测试“JunitTest1”和“JunitTest2”一起运行。
所有的声明都是在类内定义的。

@RunWith(Suite.class)
@Suite.SuiteClasses({
        JunitTest1.class,
        JunitTest2.class
})
public class JunitTest5 {
}

TestNG

XML文件用于运行套件测试。以下XML文件表示单元测试“TestNGTest1”和“TestNGTest2”将一起运行。

<suite name="My test suite">
  <test name="testing">
    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest1" />
       <class name="com.fsecure.demo.testng.TestNGTest2" />
    </classes>
  </test>
</suite>

TestNG可以做捆绑类测试,也可以捆绑方法测试。
凭借TestNG独特的“分组”概念,每种方法都可以与一个组合相结合,可以根据功能对测试进行分类(分组)。
例如,

下面是一个有四个方法的类,三个组(method1method2method3)

@Test(groups="method1")
public void testingMethod1() {
  System.out.println("Method - testingMethod1()");
}

@Test(groups="method2")
public void testingMethod2() {
    System.out.println("Method - testingMethod2()");
}

@Test(groups="method1")
public void testingMethod1_1() {
    System.out.println("Method - testingMethod1_1()");
}

@Test(groups="method4")
public void testingMethod4() {
    System.out.println("Method - testingMethod4()");
}

使用以下XML文件,可以仅使用组“method1”执行单元测试。

<suite name="My test suite">
  <test name="testing">
    <groups>
      <run>
        <include name="method1"/>
      </run>
    </groups>
    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest5_2_0" />
    </classes>
  </test>
</suite>

通过“分组”测试概念,集成测试的可能性是无限制的。
例如,我们只能从所有单元测试类中测试“DatabaseFuntion”分组。

一.需要准备的资源

目录

  • Maven2 插件
  • 原型

1. 注释支持

注释/注解支持在JUnit 4和TestNG中是非常类似的。

特点 JUnit 4 TestNG
测试注释 @Test @Test
在套件中的所有测试运行之前运行 @BeforeSuite
在套件中的所有测试运行之后运行 @AfterSuite
测试之前运行 @BeforeTest
测试之后运行 @AfterTest
在调用属于任何这些组的第一个测试方法之前运行 @BeforeGroups
在调用属于任何这些组的第一个测试方法之后运行 @AfterGroups
在调用当前类的第一个测试方法之前运行 @BeforeClass @BeforeClass
在调用当前类的第一个测试方法之后运行 @AfterClass @AfterClass
在每个测试方法之前运行 @Before @BeforeMethod
在每个测试方法之后运行 @After @AfterMethod
忽略测试 @ignore @Test(enbale=false)
预期的异常 @Test(expected = ArithmeticException.class) @Test(expectedExceptions = ArithmeticException.class)
超时测试 @Test(timeout = 1000) @Test(timeout = 1000)

JUnit4和TestNG之间的主要注释差异是:

  1. 在JUnit
    4中,我们必须声明“@BeforeClass”和“@AfterClass”方法作为静态方法。
    TestNG在方法声明中更灵活,它没有这个约束。

  2. 3个额外的setUp / tearDown级别:suitegroup(@Before / AfterSuite,@Before / After Test,@Before / After Group)

JUnit 4

@BeforeClass
public static void oneTimeSetUp() {
    // one-time initialization code
    System.out.println("@BeforeClass - oneTimeSetUp");
}

TestNG

@BeforeClass
public void oneTimeSetUp() {
        // one-time initialization code
        System.out.println("@BeforeClass - oneTimeSetUp");
}

在JUnit
4中,注释命名约定有点混乱,例如“Before”,“After”和“Expected”,我们并不真正了解“Before”和“After”之前的内容,以及要测试中的“预期”
方法。TestiNG更容易理解,它使用类似“BeforeMethod”,“AfterMethod”和“ExpectedException”就很明了。

道理同上,在build.xml中添加红色字体的部分,既可以完成ReportNG的配置


2. 异常测试

“异常测试”是指从单元测试中抛出的异常,此功能在JUnit
4和TestNG中都可实现。

JUnit 4

@Test(expected = ArithmeticException.class)
public void divisionWithException() {
  int i = 1/0;
}

TestNG

@Test(expectedExceptions = ArithmeticException.class)
public void divisionWithException() {
  int i = 1/0;
}

</xmlfileset>

接上面的文章:

4和TestNG之间的功能比较。如下图所示

图片 2

 

TestNG的Maven插件

下面表中概括了JUnit

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图