自從接觸J2SE 5.0以來,似乎Cedric Beust這個名字就在腦海中揮之不去,大約是跟他在java.sun.com的一篇對J2SE 5.0新特性的介紹文章有關吧,其實這個法國人給人留下印象最深的是他基於JUnit和J2SE 5.0的註解(Annotation)的思想創作的測試載入器:TestNG。
用過JUnit的朋友,尤其是經常使用的朋友大概會跟他有同感,那就是JUnit有些時候功能顯得太單調,不夠靈活,但是很少有人像他那樣自己另起爐灶去寫一個自己的測試架構。也許這就是我們跟發達國家在技術創新上的差距吧,我想這至少是意識上的差距。
國外各大網站已經前前後後做了不少介紹,國內網站則似乎還沒有十分重視這個看上去不起眼的傢伙。這究竟是個什麼樣的工具呢?有些什麼特色?大致總結一下就是:
對Java註解的支援
利用XML配置測試過程
不需要實現介面或繼承類(如JUnit的TestCase/TestSuite)
支援獨立的方法和分組
支援並行測試
測試方法支援傳入參數
任意制定的調用次數和成功率統計
現在,我們有機會在Eclipse環境嘗試這個測試架構了,還要多多感謝TestNG外掛程式的作者Alexandru Popescu犧牲掉那麼多自己的時間。怎麼樣?躍躍欲試?該外掛程式的update site是:http://beust.com/eclipse/,需要注意的是它目前只支援Eclipse 3.1版本,因為Java註解的原因。
為了簡單做一個示範,我隨便寫了一些代碼:
[FooCalculator.java]package sean.home.test;
public class FooCalculator {
public static int increaseByOne(int origVal) {
return ++origVal;
}
}
[FooCalculatorTest.java]package sean.home.test;
import com.beust.testng.annotations.*;
public class FooCalculatorTest {
private int origVal;
@Configuration (beforeTestClass = true)
public void setUp() {
origVal = Integer.MAX_VALUE;
}
@Test
public void testIncreasByOne() {
int result = FooCalculator.increaseByOne(origVal);
assert result > 0;
}
}
[TestFooCalculator.xml]<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="Custom Suite" >
<test name="To Test FooCalculator" >
<classes>
<class name="sean.home.test.FooCalculatorTest" />
</classes>
</test>
</suite>
完成以後,我們可以在Eclipse中右鍵選中我們的測試類別或者設定檔,選運行TestNG,這樣我們就能看到Console視圖和TestNG視圖中顯示的結果了。
更多資訊,參考:http://beust.com/testng/。希望對NUnit的愛好者、學習者們也有協助。