2017-08-25 56 views
0

我在測試套件中有一堆測試。TestNG:如何驗證通用函數中的測試結果

@Test 
public void test1() { 
    // test 1 
    assert... 
} 

@Test 
public void test2() { 
    // test 2 
    assert... 
} 

我有另一種叫做'verify()'的方法,在測試完成後做了一些額外的斷言。

void verify() { 
    // more asserts that are common to test1() and test2() 
} 

要利用這些斷言在驗證()時,直截了當的方式我能想到的是添加驗證()在每次試驗結束。但是有沒有更優雅或更簡單的方式呢?

我看了一下TestNG的@AfterMethod(和@AfterTest)。如果我添加@AfterMethod來驗證(),則會執行verify()中的斷言。但是,如果斷言通過,它們不會顯示在測試報告中。如果斷言失敗,那些失敗標記爲配置失敗,而不是測試失敗。

如何確保在運行每個測試後始終調用verify(),並仍將verify()中的斷言結果報告爲測試結果的一部分?

謝謝!

回答

2

你基本上可以讓你的測試類實現接口org.testng.IHookable

當TestNG的看到一個類實現這個接口,然後TestNG的不直接打電話給你的@Test方法,而是它調用從IHookable實現從其中我們希望你通過調用觸發測試方法調用run()方法在傳遞給你的org.testng.IHookCallBack回調。

這裏的一個樣品,顯示這個動作:

import org.testng.IHookCallBack; 
import org.testng.IHookable; 
import org.testng.ITestResult; 
import org.testng.annotations.Test; 

public class MyTestClass implements IHookable { 
    @Override 
    public void run(IHookCallBack callBack, ITestResult testResult) { 
     callBack.runTestMethod(testResult); 
     commonTestCode(); 
    } 

    public void commonTestCode() { 
     System.err.println("commonTestCode() executed."); 

    } 

    @Test 
    public void testMethod1() { 
     System.err.println("testMethod1() executed."); 
    } 

    @Test 
    public void testMethod2() { 
     System.err.println("testMethod2() executed."); 
    } 
} 

這裏的執行的輸出:

testMethod1() executed. 
commonTestCode() executed. 
testMethod2() executed. 
commonTestCode() executed. 

=============================================== 
Default Suite 
Total tests run: 2, Failures: 0, Skips: 0 
=============================================== 
相關問題