testNG与Junit相同功能概要介绍(2)

上一篇 / 下一篇  2012-03-22 12:00:29 / 个人分类:TestNG

  参数测试

有时候要对某一特定方法传入各种不同的参数值,用来测试这个方法的健壮性。以前TDD 中必须为每种参数值单独写一个独立的测试方法。这样就造成很多测试代码测试的都是同一方法,只是传入的参数值有不同。testNG同 Junit4 中一样只需要一个测试方法就能针对 N 种不同参数值进行 N 次测试。试看如下代码:

 

Java代码  收藏代码
  1. package main;  
  2.   
  3. import org.testng.annotations.BeforeClass;  
  4. import org.testng.annotations.DataProvider;  
  5. import org.testng.annotations.Test;  
  6.   
  7. /** 
  8.  * @author Administrator 
  9.  */  
  10. public class TestParameter {  
  11.     private static Money f12CHF;  
  12.   
  13.     @BeforeClass  
  14.     public static void setUp() {  
  15.         f12CHF = new Money(12"CHF");  
  16.     }  
  17.   
  18.     /** 
  19.      * 第一个注意点  
  20.      * 参数化测试必须的构造函数  
  21.      * @return 
  22.      */  
  23.     @DataProvider(name = "test-provider")  
  24.     public static Object[][] words() {  
  25.         return new Object[][] { { new Money(23"CHF"), new Money(11"CHF") },  
  26.                 { new Money(28"CHF"), new Money(16"CHF") } };  
  27.     }  
  28.   
  29.     /** 
  30.      * 第二个注意点  
  31.      *@param expected 期望的测试结果,对应参数集中的第一个参数 
  32.      *@param target 测试数据,对应参数集中的第二个参数  
  33.      *Test属性dataProvider值和构造函数的dataProvider属性name值相对应 
  34.      *实际需要测试的方法 
  35.      */  
  36.     @Test(dataProvider = "test-provider")  
  37.     public void add(Money expected, Money target) {  
  38.         assert true : expected.equals(f12CHF.add(target));  
  39.     }  
  40. }  
 

请详细查看注释中所标注的注意点。首先 设置 测试类构造方法。用此方法进行参数初始化。该方法 返回一个Object[][] 类型。需要用 @DataProvider 注解来修饰该方法,并设置name值。在该方法内部,仅仅创建一个多维Object 数组 。之后在需要测试的方法中设置@Test的dataProvider属性。其值要和上面 @DataProvider修饰的 方法中的name值相同。然后运行 testNG 后,测试通过后的界面如下图:

由图可知执行该测试类时,通过 add ()测试方法运行两次,将代码中 words 方法里的每个值对运行一次。

 套件测试

相比 Junit 的套件测试, testNG套件测试可以通过testng.xml文件来实现。代码示例如下:

 

Java代码  收藏代码
  1. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
  2.   
  3. <suite name="test suite" verbose="1" parallel="false" thread-count="2">  
  4.     <test name="main">  
  5.         <classes>  
  6.             <class name="main.TestSample" />  
  7.             <class name="main.TestFixture" />           
  8.             <class name="main.TestParameter" />  
  9.         </classes>  
  10.     </test>  
  11.   
  12. </suite>  
 

这里略微详细讲一下testng.xml文件中相关标签和属性。

<suite>这是testng.xml文件的根标签,描述一个测试套件。套件由多个<test>组成。属性介绍如下:

name:套件名称,是必需要有的。

verbose:执行的输出详细程度。因为testng会输出html格式的测试报告。因此该属性决定报告详细程度。程度值由0-10.0是没有,10是最详细。不是必需有的。

parallel:表明是否利用不同线程来执行测试套件。值有tests,methods或none。不是必需有的。

thread-count:如果启用上面parallel模式,使用线程数。而且如果启用,默认值是5。不是必需有的。

上面parallel和thread-count属性通常都是一块用的。

<suite>标签可以包括1到多个<test>标签。这里name属性是<test>的必须属性,代表测试名称。

<classes>和<class>标签都是<test>子标签,定义在测试中所包含的测试类。name属性也是必须属性,而且必须是该测试类的全路径名称。如代码中的main.TestSample.

可以在eclipse中点击testng.xml文件,右键run as中的testNG,结果如下图:

 

 

 

如图,可看到包中所有的测试类都测试运行通过。

可以通过在eclipse中的window-->Preferences中设置testng的测试报告输出路径。如下图:

 

 

这里可见我本机设置的是绝对输出路径,可去该路径下双击index.html文件查看测试报告,如下图:

 


TAG:

ryugun的个人空间 引用 删除 ryugun   /   2012-03-23 09:38:22
3
 

评分:0

我来说两句

日历

« 2024-03-25  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 9345
  • 日志数: 12
  • 建立时间: 2011-03-08
  • 更新时间: 2012-06-06

RSS订阅

Open Toolbar