您好,登錄后才能下訂單哦!
網(wǎng)上看了一篇英文帖子,講解JUnit和TestNG框架的區(qū)別,挺好的,我這里翻譯下。
1.對于注解類的支持
功能 | JUnit | TestNG |
標(biāo)注為類/方法為測試類和方法 | @Test | @Test |
標(biāo)注為在suite中所有測試之前運行 | 無 | @BeforeSuite |
標(biāo)注為在suite中所有測試之后運行 | 無 | @AfterSuite |
標(biāo)注為在測試之前運行 | 無 | @BeforeTest |
標(biāo)注為在測試之后運行 | 無 | @AfterTest |
標(biāo)注為在測試Group中第一個測試方法之前運行 | 無 | @BeforeGroups |
標(biāo)注為在測試Group中最后一個測試方法之后運行 | 無 | @AfterGroups |
標(biāo)注為當(dāng)前測試類中第一個測試方法之前運行 | @BeforeClass | @BeforeClass |
標(biāo)注為當(dāng)前測試類中最后一個測試方法之后運行 | @AfterClass | @AfterClass |
標(biāo)注為在每次測試方法之前運行 | @Before | @BeforeMethod |
標(biāo)注為在每次測試方法之后運行 | @After | @AfterMethod |
忽略某測試,讓其不執(zhí)行 | @Ignore | @Test(enable=false) |
期待測試拋出什么異常 | @Test(expected=XXXException.class) | @Test(exceptedExceptions=XXXException.class) |
測試超時,如果測試的執(zhí)行時間超過了毫秒為單位設(shè)置的時間,那么就停止測試并且標(biāo)記為失敗 | @Test(timeout=1000) | @Test(timeout=1000) |
2.測試參數(shù)化
對于TestNG和JUnit都有不同的參數(shù)化設(shè)定功能,可是表現(xiàn)形式不同。參數(shù)化設(shè)定意味著當(dāng)運行測試的時候,參數(shù)可以從外部傳入到這個測試單元中。
對于TestNG來說,要2部分,一是當(dāng)構(gòu)造測試代碼時候,要用@Parameters(value=XXX)來表示這個測試需要什么參數(shù),這樣的優(yōu)點是可以讓測試更加靈活并且可以根據(jù)不同的參數(shù)來得到不同的期望結(jié)果,比如:
public class TestNGTest6_1_0 { @Test @Parameters(value="number") public void parameterIntTest(int number) { System.out.println("Parameterized Number is : " + number); } }
然后,在我們的XML文件中,我們把參數(shù)的具體值設(shè)置進(jìn)來,如下:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.fsecure.demo.testng.TestNGTest6_0" /> </classes> </test> </suite>
那么,如果我們要給的參數(shù)比較復(fù)雜,我們無法用一個簡單的String或者 原子類型在XML文件”推“給測試方法,那么怎么辦呢?這時候,我們就要用”拉“模型了,我們用一個DataProvider屬性來給被測試的方法上聲明它需要的數(shù)據(jù),然后平行的,用@DataProvider注解來標(biāo)注一個方法,讓這個方法的返回值返回具體的數(shù)據(jù),這樣我們2個拼接下就完美了。
比如說:下面代碼聲明我們的測試類需要一個DataProvider:
@Test(dataProvider = "Data-Provider-Function") public void parameterIntTest(TestNGTest6_3_0 clzz) { System.out.println("Parameterized Number is : " + clzz.getMsg()); System.out.println("Parameterized Number is : " + clzz.getNumber()); }
然后相應(yīng)的我們用@DataProvider來標(biāo)注一個方法,這個方法提供了數(shù)據(jù):
//This function will provide the patameter data @DataProvider(name = "Data-Provider-Function") public Object[][] parameterIntTestProvider() { TestNGTest6_3_0 obj = new TestNGTest6_3_0(); obj.setMsg("Hello"); obj.setNumber(123); return new Object[][]{ {obj} }; }
3.測試依賴性:
對于JUnit 來說,所有的測試彼此之間都是獨立的,毫無依賴性。
但是對于 TestNG來說,我們完全可以讓測試彼此之間有依賴性,做法就是dependsOnMethods屬性來標(biāo)識一個被依賴的測試方法:
@Test public void method1() { System.out.println("This is method 1"); } @Test(dependsOnMethods={"method1"}) public void method2() { System.out.println("This is method 2"); }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。