2011-09-10 6 views
1

テストを実行した後にメソッドを実行する方法があるかどうかを知りたいと思います。 私はeclipseを使用しています。テストの一部または全部を実行してから、 というコードを実行すると、junitは常に最後のテストの後に一度自分のテストを実行します。junit4で最後のテストを行った後にグローバルティアダウンメソッドを実行する

具体的な問題は、私がセレニウムwebdriverを使用していて、すべてのテストが完了した後にwebdriverのquitメソッドを実行したいということです。最初に私は静的なクラスwebdriver参照を管理していた、今私はシングルトンのパターンに移動しました。私はもっ​​と良い解決策があると信じていますが、今は私がJavaの初心者であるため、IoCコンテナを使用したくありません。

これまでのところ私はいくつかのアプローチを試みましたが、どれも成功しませんでした。

スーツアプローチは、私はすべての私のテストを実行したときに動作します:

@RunWith(Suite.class) 
@SuiteClasses({SomeTest.class, OtherTest.class, AnotherTest.class}) 
    public class TestSuit { 

    @BeforeClass 
    public static void setUp() { 
     System.out.println("setting up"); 
    } 

    @AfterClass 
    public static void tearDown() { 
     System.out.println("tearing down"); 
    } 
} 

しかし、私はちょうど1つのテストクラスまたは1つの特定の名前空間からすべてのテストを実行したい場合はどうでしょうか。

クラスアプローチは、すべてのテストが1つのクラスにグループ化されている場合にのみ機能します。

私はNUnitがSetUpFixtureAttributeを実装していると信じています。私が得たいと思っているのは、jUnitに対応していますか?

答えて

0

代わりにTestNGを使用したことはありますか? @ BeforeTest/@ AfterTestまたは@ BeforeSuite/@ AfterSuiteを使用して、一連のテストまたは一連のテストの前後にブラウザのオープン/クローズ方法を実行できます。 (http://testng.org/doc/documentation-main.html)> <テスト> <クラス> ... < /クラス> < /テスト> ... < /スイート>

<スイート

個人的には、@ BeforeMethod/@ AfterMethodを使用してブラウザを読み込んで閉じると、新しいテストが始まる前にクリーンブラウザインスタンスが取得されます。これを行うにはもっと長い時間がかかりますが、それは私が実行しているテスト/ソフトウェアの種類に基づいて作った選択肢です。 @ BeforeClass/@ Afterclassを使用する場合、テストクラス内のテストのグループ化について心配することなく、並列スレッドでテストを実行することもできます。

+0

私はそれを試してみると思いますが、これまでのところ、それは唯一の解決策です。あなたの助けを借りてください。 – 0lukasz0

+1

これはLukasのために機能しましたか? – SlimDavid

0

このような場合にJUnitを使用する場合は、使用するテストランナーの代替バージョンまたは変更バージョンを提供することができます。あなたのテストケースの中にデバッグフラグをセットし、その後に起こっていることをデバッグするだけです。遅かれ早かれテストランナーの実装を正しい場所に突きつけます。

今はあなたの時間です。クラスをsrcフォルダにコピーするだけです(追加のsrcフォルダを使用するか、src/test/javaの中でコードベースを駄目にしないでください)。あなたが好きなように、クラスを元のパッケージ名と元のクラス名に変更する必要があります。

楽しい部分は、クラスパスがブートストラップローダーによって最初にロードされる(eclipse /などによって)構築されていることです。こうすることで、オリジナルのjunitバージョンがロードされる前に、提供されたバージョンが最初にピックアップされます。

これで、元のクラスと同じパッケージに入っているので、テストランナー拡張機能(またはそれを呼び出したいもの)を呼び出すことができ、すべてを完全に制御できます。

私自身は、クラスファイル内で宣言されている方法を並べ替えるだけです(メソッドの正しい順序付けを得るためにクラスファイルを読み込むためにasmを使います)。

また、追加のテスト用にパッケージとサブパッケージをスキャンする動作を追加したので、スイートを使用する必要はなく、ビルドするためにいくつかのクラスを与える必要もありません。サブスイートは、追加のテストケースを発見することにより、即座に構築されます。それは私のスイートにも当てはまります。時には特定のサブパッケージですべてのテストが必要な場合がありますので、スイートで注釈を付けたクラスをドロップします。

スイートを構成することで残りの部分がランナーになります。 1つは、ゲームに注釈を追加することさえできます。だから@Fastのようなテストに注釈を付け、テストランナーの中で高速テストを実行するのはスイートに@Fastという注釈が付いているからです。あなたはそれを持っています...。

関連する問題