テストスイートによってクラスが開始された場合、JUnit 4テストクラスで知る方法はありますか? すべてのテスト(メモリ内DBに関する)前に実行したいグローバルなものがあるので、テストスーツで実行すると思っていました。しかし、私はまだテストスーツなしで一度に1つのテストを開始できるようにしたいので、テストの@前の部分でグローバルなものを初期化する必要があるかどうかを知る必要があります。それが可能ならば?テスト呼び出し:すべてのテストスイートに共通の設定方法
答えて
これを達成するにはいくつかの方法があります。最も簡単で簡単なのは、データベースを設定してグローバルフラグを設定するスイートの最初と最後で実行される 'テスト'を持つことです。 @Beforeと@Afterテストでは、このフラグをチェックし、必要に応じてセットアップ/ティアダウンを行います。
@RunWith(Suite.class)
@SuiteClasses({SetupTest.class, RealTest.class, TeardownTest.class});
これは、最も簡単な解決策ですが、それは非常に素晴らしいではないので、すっきり解決策はTestRuleを使用することです。拡張を見てくださいExternalResource。これは、テストメソッドを囲むロジックの後に&の前に実装されています。これにより、@Beforeメソッドと@Afterメソッドを除外して、どこでも同じコードを再利用することができます。
あなたのスイートでは、before/afterロジックも実装する必要があります。残念ながら、@RunWith(Suite.class)でアノテートされたクラスは実際にはインスタンス化されないため、そのクラスのコンストラクタは使用できませんが、Suiteを拡張できます。あなたがこれを実行する方法に応じて、あなたは一例として@RunWith使用して、コンストラクタのいずれかを実装する必要がありますされます:
public class MySuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
// set global variable
}
}
が続い
@RunWith(MySuite.class)
を使用してテストスイートを実行するいくつかのコンストラクタがあります。それぞれ異なる状況で使用されている場合は、それぞれの次のコメントを見てください。ルールがセットアップコードを再実行しないように、グローバル変数を使用する必要があります。セットアップコードだけを実行したい場合はティアダウンコードを実行するのが難しいですが、実行することができれば上記はうまくいくでしょう。
さらに柔軟性が必要な場合(特定のメソッドに対してのみセットアップコードを実行する場合)は、How to define JUnit method rule in a suite?への私の回答を参照してください。
このタイプの作業を行う方法を示すために、JUnitの@BeforeClassと@AfterClassの注釈を使用します。
@BeforeClass Javadocのから:
時々、いくつかのテストは、(データベースにログインするように)計算コストが高いセットアップ を共有する必要があります。これはテストの独立性を損なう可能性がありますが、時には最適化が必要です。 @BeforeClassを使用してパブリックstatic void no-argメソッドに注釈を付けると、そのクラス内のテストメソッドの前に一度実行されます( )。スーパークラスの@BeforeClassメソッド は、現在のクラス の前に実行されます。
これは、1つのテストクラスファイル内のいくつかの注釈付き@Testメソッドに関連しています。これは、私が扱っているシナリオではないので、いくつかのテストクラスに必要です。 – stdcall
共通の設定を行う補助クラスに委譲する各テストスイートには、@BeforeClass
コードを配置できます。補助クラスは、既にセットアップが完了したかどうかを記録するstatic boolean
を持つことができます。すでに完了している場合、補助クラスは何も行いません。
- 1. アーラン - スキップ共通テストですぐにテストスイート
- 2. マイクロサービス設計 - すべてのレコードの呼び出し方法
- 3. 共有設定を使用してリストを呼び出す方法
- 4. Xamarin:通知呼び出しでIValueConverterを呼び出す方法
- 5. ノードjsで共通関数を呼び出す方法
- 6. すべてのビューロードで共通のファイルが呼び出される
- 7. ボタンで呼び出す他のアクティビティの共有設定
- 8. 分度器の他のテストケースで共通のテストケースを呼び出す方法
- 9. 決定を通じて特定のメソッドを呼び出す最速の方法
- 10. コンパイル時にすべてのlibc呼び出しを特定する方法は?
- 11. Cテストスイートでスウィフトコードを呼び出す
- 12. すべてのdef呼び出しのRuby呼び出しメソッド?
- 13. boost :: variantの型に共通のメソッドを呼び出す
- 14. laravel 5の2つのプレフィックスルートに共通の特定のコントローラを呼び出す方法
- 15. テーブルへのすべての挿入呼び出しを特定する方法
- 16. 呼び出しメソッドなしでUISegmentedControlを設定する方法
- 17. 複数のクラスのプライベートデータメンバーを設定して呼び出す方法は?
- 18. web.config内のすべてのステータスコードに共通のカスタムエラーページを設定します。
- 19. jqueryでajax呼び出しでヘッダーを設定する方法
- 20. TRON API呼び出しでヘッダーを設定する方法は?
- 21. android:フォアグラウンドサービス通知をクリックしてアクティビティを呼び出す方法
- 22. アラームマネージャによる通知の呼び出し方法
- 23. ES1RendererからのEAGLViewの共同呼び出し方法
- 24. オブジェクトのすべてのインスタンスのメソッドを呼び出す方法
- 25. クラス内のすべてのテストのテストカテゴリの設定方法
- 26. 複数の共通クラスを持つ特定のテキストフィールドを呼び出す
- 27. すべてのAjaxリクエストで特定の関数を呼び出す方法
- 28. すべてのページフリップの後にメソッド呼び出しを呼び出すUIPageViewController
- 29. iPhone AVAudioRecorderでrecordForDurationを呼び出した後に呼び出す関数を設定する方法は?
- 30. QUnitテスト:メソッド内のAjax呼び出しの応答をテストする方法は?
リンクのほとんどが死んでいます。 – Nadar