1

コンテキストを設定するためだけに、私のテストケースはいくつかのデータを作成し、そのデータをティアダウンで削除したいと考えています。戻り値(およびそのタイプ、主にドメインオブジェクト)を検査し、データをクリーンアップする(以下のようなもの)ような方法で、一般的なティアダウンプロセスを(AfterMethod/AfterClass/Listenerを介して)実装したいと思います。

public class SampleTest {

@AfterMethod
public void teardown(Object returnValueFromTest){
    //inspect returnValueFromTest and perform necessary clean up.
}

@Test
public String testEventGeneration(){
    //generate event

    //returning generated event id.
    return "E1234";
}

@Test
public Market testMarketGeneration(){
    //generate market

    //returning generated market.
    return someMarket;
}}

testNGでこれを達成する方法についてのアイデア/考えはありますか? IHookable のようなリスナーの実装も検討しましたが、戻り値を取得するのに役立つリスナーが見つかりませんでした。

4

3 に答える 3

1

これは簡単に処理できます。すべてのテストが実行された後にすべてを巻き戻したい場合は、@AfterMethod アノテーションの代わりに @AfterClass アノテーションを使用する必要があります。@AfterMethod アノテーションは、テスト クラスのすべてのテスト メソッドの後にトリガーされます。

そして流れるコードはあなたの仕事をするだけです。これをリスナー レベルで実装する場合は、ITestListener を実装し onFinish メソッドでロジックを実装できます。

public class SampleTest { private String event_id = null;

@AfterClass(alwaysRun = true)
public void teardown(){
    //delete event from the db(event_id) 

}

@Test
public void testEventGeneration(){
    //generate event

    //returning generated event id.
    event_Id= "E1234";
}}
于 2012-10-04T20:16:18.570 に答える
0

InvokedMethodListener2 の使用を検討しましたか?

public Class BaseTestNg {

    ITestContext ctx;

    public ITestContext getContext(){
        return this.ctx;
    }

    @BeforeClass
    public void setContext( final ITestContext ctx ) {
        this.ctx = ctx;
    }
}

public Class SampleTest extends BaseTestNg {

    @Test
    public Market testMarketGeneration(){
        //generate market
        this.getContext().setAttribute("market", someMarket);
        //returning generated market.
        return someMarket;
    }
}


import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener2;
import org.testng.ITestContext;
import org.testng.ITestResult;

public class InvokedMethodListener2Impl implements IInvokedMethodListener2 {

    @Override
    public void afterInvocation( final IInvokedMethod method, final ITestResult testResult ) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterInvocation( final IInvokedMethod method, final ITestResult testResult, final ITestContext context ) {

        //read object from context
        //Market = (Market) context.getAttribute("market");

        // testResult.setStatus( ITestResult.FAILURE );

    }

    @Override
    public void beforeInvocation( final IInvokedMethod method, final ITestResult testResult ) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeInvocation( final IInvokedMethod method, final ITestResult testResult, final ITestContext context ) {
        // TODO Auto-generated method stub

    }

}
于 2013-02-01T19:25:44.460 に答える
0

AFAIK Testng は、関連付けられた戻り値がある場合、Test として注釈が付けられたメソッドを実行しません。

そのため、値セットに基づいて破棄する場合は、これらの値を戻り値としてではなく、グローバル コンテキストまたは外部で設定する必要があります。破棄するタイミングに基づいて、破棄ロジックをリスナーとして、または任意の After メソッドで記述できます。

于 2012-10-05T12:32:33.647 に答える