測(cè)試即文檔:自動(dòng)化測(cè)試框架Concordion
(一)Concordion的工作原理
簡(jiǎn)單的說(shuō),Concordion測(cè)試只是對(duì)JUnit的擴(kuò)展,但是它可以從你寫(xiě)好的測(cè)試文檔(html)中讀取測(cè)試數(shù)據(jù),通過(guò)傳統(tǒng)的JUnit來(lái)跑測(cè)試,并將測(cè)試結(jié)果輸出為具有紅綠標(biāo)記(表示失敗或成功)的html文檔(基于原測(cè)試文檔)。
在上圖中,Specification即為我們寫(xiě)的html測(cè)試文檔,與普通的html文檔不同的是,我們需要在其中加入一些名為concordion 的標(biāo)簽,瀏覽器將忽略這些標(biāo)簽,但Concordion用這些標(biāo)簽來(lái)執(zhí)行測(cè)試指令,比如調(diào)用Fixture中的測(cè)試函數(shù)等。Fixture為繼承自 ConcordionTestCase(最終繼承自JUnit測(cè)試類(lèi))的測(cè)試用例,這些測(cè)試用例將調(diào)用我們自己所開(kāi)發(fā)的功能代碼。
(二)Concordion的Hello World
下面就通過(guò)一個(gè)簡(jiǎn)單的Hello World例子來(lái)演示Concordion。
首先寫(xiě)一個(gè)html測(cè)試用例HelloWorld.html:
<html xmlns:concordion=http://www.concordion.org/2007/concordion> <body> <p>Should print:</p> <p concordion:assertEquals="sayHello()">HelloWorld</p> </body> </html> |
此html文檔可以通過(guò)瀏覽器正常打開(kāi),由于瀏覽器并不知道concordion標(biāo)簽,故將其忽略:
可以看到,以上加入的concordion標(biāo)簽的html測(cè)試文檔和普通的html文檔并無(wú)區(qū)別,同時(shí)我們也看到在concordion標(biāo)簽后有一個(gè) sayHello()函數(shù)調(diào)用,此函數(shù)從什么地方來(lái)呢——這就是Concordion的約定,要求在該html文檔的同目錄下有一個(gè)名為 HelloWorldTest.java的測(cè)試用例類(lèi)存在,并且該類(lèi)有一個(gè)測(cè)試函數(shù)名為sayHello()。約定規(guī)則為:如果html文檔名為 Foo.html,那么測(cè)試用例類(lèi)應(yīng)該為FooTest.java。此時(shí)Concordion便通過(guò)名字匹配去找名為HelloWorldTest類(lèi)的 sayHello()函數(shù)并調(diào)用之。
我們還注意到,在concordion標(biāo)簽后有assertEquals,此時(shí)Concordion將把helloWorld()函數(shù)的輸出與之后的“HelloWorld”字符串相比,如果相等,測(cè)試成功,否則失敗。
接下來(lái)實(shí)現(xiàn)HelloWorldTest類(lèi),在HelloWorld.html同目下創(chuàng)建HelloWorldTest.java文件:
package com.thoughtworks.davenkin.concordion;
import org.concordion.integration.junit3.ConcordionTestCase;
public class HelloWorldTest extends ConcordionTestCase {
public String sayHello()
{
return new HelloWorld().sayHelloWorld();
}
}
在HelloWorldTest.java文件中實(shí)例化了一個(gè)HelloWorld對(duì)象,并調(diào)用其sayHelloWorld()方法,于是寫(xiě)一個(gè)需要測(cè)試的HelloWorld類(lèi)如下:
package com.thoughtworks.davenkin.concordion; public class HelloWorld |
最終生成的工程目錄結(jié)構(gòu)如下:
(三)編譯并運(yùn)行測(cè)試
打開(kāi)終端,將目錄切換到 concordion(這是筆者為此helloworld創(chuàng)建的工程根目錄,請(qǐng)不要與上文提到的concordion混淆)下,編譯:
javac -cp lib/*:src:test test/com/thoughtworks/davenkin/concordion/HelloWorldTest.java |
用JUnit運(yùn)行測(cè)試:
java -cp lib/*:src:test org.junit.runner.JUnitCore com.thoughtworks.davenkin.concordion.HelloWorldTest |
運(yùn)行結(jié)果如下:
JUnit version 4.8.2 Time: 0.307 OK (1 test) |
運(yùn)行成功,并且顯示測(cè)試輸出的html文件的全路徑名稱(chēng)(此時(shí)應(yīng)該去掉最前面的那個(gè)點(diǎn)"."):
/var/folders/wM/wMUC8-0FEsq-MMkTzdzYA++++TI/-Tmp-/concordion/com/thoughtworks/davenkin/concordion/HelloWorld.html |
打開(kāi)該文件:
測(cè)試運(yùn)行成功。
posted on 2012-03-13 09:57 順其自然EVO 閱讀(2282) 評(píng)論(0) 編輯 收藏