2017-08-25 14 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's @AfterMethod(と@AfterTest)を見ました。 @AfterMethodをverify()に追加すると、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 
=============================================== 
関連する問題