亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > TestNG
JUnit 4與TestNG的對比
作者:網絡轉載 發布時間:[ 2013/2/22 14:18:48 ] 推薦標簽:

參數化測試

TestNG 中另一個有趣的特性是參數化測試。在 JUnit 中,如果您想改變某個受測方法的參數組,只能給每個 不同的參數組編寫一個測試用例。多數情況下,這不會帶來太多麻煩。然而,我們有時會碰到一些情況,對其中的業務邏輯,需要運行的測試數目變化范圍很大。

在這樣的情況下,使用 JUnit 的測試人員往往會轉而使用 FIT 這樣的框架,因為這樣可以用表格數據驅動測試。但是 TestNG 提供了開箱即用的類似特性。通過在 TestNG 的 XML 配置文件中放入參數化數據,可以對不同的數據集重用同一個測試用例,甚至有可能會得到不同的結果。這種技術完美地避免了只能 假定一切正常的測試,或是沒有對邊界進行有效驗證的情況。

在清單 5 中,我用 Java 1.4 定義了一個 TestNG 測試,該測試可接收兩個參數:classname 和 size。這兩個參數可以驗證某個類的層次結構(也是說,如果傳入 java.util.Vector,則 HierarchyBuilder 所構建的 Hierarchy 的值將為 2 )。

清單 5. 一個 TestNG 參數化測試

package test.com.acme.da;

import com.acme.da.hierarchy.Hierarchy;
import com.acme.da.hierarchy.HierarchyBuilder;

public class HierarchyTest {
/**
* @testng.test
* @testng.parameters value="class_name, size"
*/
public void assertValues(String classname, int size) throws Exception{
Hierarchy hier = HierarchyBuilder.buildHierarchy(classname);
assert hier.getHierarchyClassNames().length == size: "didn't equal!";
}
}

清單 5 列出了一個泛型測試,它可以采用不同的數據反復重用。請花點時間思考一下這個問題。如果有 10 個不同的參數組合需要在 JUnit 中測試,您只能寫 10 個測試用例。每個測試用例完成的任務基本是相同的,只是受測方法的參數有所改變。但是,如果使用參數化測試,可以只定義一個 測試用例,然后,(舉例來說)把所需的參數模式加到 TestNG 的測試套件文件中。清單 6 中展示了這中方法:

清單 6. 一個 TestNG 參數化測試套件文件

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd">
<suite name="Deckt-10">
<test name="Deckt-10-test">

<parameter name="class_name" value="java.util.Vector"/>
<parameter name="size" value="2"/>

<classes>
<class name="test.com.acme.da.HierarchyTest"/>
</classes>
</test>
</suite>

清單 6 中的 TestNG 測試套件文件只對該測試定義了一個參數組(class_name 為 java.util.Vector,且 size 等于 2),但卻具有無限的可能。這樣做的一個額外的好處是:將測試數據移動到 XML 文件的無代碼工件意味著非程序員也可以指定數據。

高級參數化測試

盡管從一個 XML 文件中抽取數據會很方便,但偶爾會有些測試需要有復雜類型,這些類型無法用 String 或原語值來表示。TestNG 可以通過它的 @DataProvider 注釋處理這樣的情況。@DataProvider 注釋可以方便地把復雜參數類型映射到某個測試方法。例如,清單 7 中的 verifyHierarchy 測試中,我采用了重載的 buildHierarchy 方法,它可接收一個 Class 類型的數據, 它斷言(asserting)Hierarchy 的 getHierarchyClassNames() 方法應該返回一個適當的字符串數組:

清單 7. TestNG 中的 DataProvider 用法

package test.com.acme.da.ng;

import java.util.Vector;

import static org.testng.Assert.assertEquals;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import com.acme.da.hierarchy.Hierarchy;
import com.acme.da.hierarchy.HierarchyBuilder;

public class HierarchyTest {

@DataProvider(name = "class-hierarchies")
public Object[][] dataValues(){
return new Object[][]{
{Vector.class, new String[] {"java.util.AbstractList",
"java.util.AbstractCollection"}},
{String.class, new String[] {}}
};
}

@Test(dataProvider = "class-hierarchies")
public void verifyHierarchy(Class clzz, String[] names)
throws Exception{
Hierarchy hier = HierarchyBuilder.buildHierarchy(clzz);
assertEquals(hier.getHierarchyClassNames(), names,
"values were not equal");
}
}

dataValues() 方法通過一個多維數組提供與 verifyHierarchy 測試方法的參數值匹配的數據值。TestNG 遍歷這些數據值,并根據數據值調用了兩次 verifyHierarchy。在第一次調用時,Class 參數被設置為 Vector.class ,而 String 數組參數容納 “java.util.AbstractList ” 和 “ java.util.AbstractCollection ” 這兩個 String 類型的數據。這樣挺方便吧?

為什么只選擇其一?

我已經探討了對我而言,TestNG 的一些獨有優勢,但是它還有其他幾個特性是 JUnit 所不具備的。例如 TestNG 中使用了測試分組,它可以根據諸如運行時間這樣的特征來對測試分類。也可在 Java 1.4 中通過 javadoc 風格的注釋來使用它,如 清單 5 所示。

正如我在本文開頭所說,JUnit 4 和 TestNG 在表面上是相似的。然而,設計 JUnit 的目的是為了分析代碼單元,而 TestNG 的預期用途則針對高級測試。對于大型測試套件,我們不希望在某一項測試失敗時得重新運行數千項測試,TestNG 的靈活性在這里尤為有用。這兩個框架都有自己的優勢,您可以隨意同時使用它們。

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 国产三级在线看 | 一级特色黄大片 | 黄 色 免 费 网站在线观看 | 日韩毛片在线免费观看 | 亚洲综合色一区二区三区另类 | 日韩免费中文字幕 | 最近的中文字幕2019更新 | 天堂中文资源网 | 男女性免费视频观看 | 欧美日韩第二页 | 欧美视频手机在线 | 成人永久福利在线观看不卡 | 婷婷在线综合 | 成人高清视频在线观看 | 日本高清www午色夜黄 | 国产精品毛片一区二区三区 | 欧美激情二区 | 亚洲欧洲中文字幕 | 亚洲第6页| 日本人69视频 | 激情欧美一区二区三区中文字幕 | 成人av在线播放 | 99精品国产成人一区二区 | 一个人免费播放在线视频看片 | 久久国产成人午夜aⅴ影院 久久国产欧美日韩精品 | 亚洲国产二区三区久久 | 天天操夜夜操狠狠操 | 主播蜜汁丝袜 精品自拍 | 天天干天天摸天天操 | 综合久久久久久 | 国产第一福利精品导航 | 亚洲一成人毛片 | 久久er国产精品免费观看1 | 在线观看视频你懂得 | 欧美一区二区三区综合色视频 | 国产2区| 五月天伊人网 | 亚洲污网站 | 色偷偷偷偷要 | 国产色啪午夜免费视频 | 黄色短视频免费观看 |