テストスイートによってクラスが開始された場合、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. すべてのdef呼び出しのRuby呼び出しメソッド?
- 4. 呼び出しメソッドなしでUISegmentedControlを設定する方法
- 5. boost :: variantの型に共通のメソッドを呼び出す
- 6. laravel 5の2つのプレフィックスルートに共通の特定のコントローラを呼び出す方法
- 7. アラームマネージャによる通知の呼び出し方法
- 8. クラス内のすべてのテストのテストカテゴリの設定方法
- 9. ES1RendererからのEAGLViewの共同呼び出し方法
- 10. すべてのAjaxリクエストで特定の関数を呼び出す方法
- 11. iPhone AVAudioRecorderでrecordForDurationを呼び出した後に呼び出す関数を設定する方法は?
- 12. すべてのDelegateCommandとDelegateCommandに対してRaiseCanExecuteChangedを呼び出す方法
- 13. 電話の呼び出し画面の呼び出し方法
- 14. C++共通ベースクラスのプライベート/プロテクト機能を呼び出す
- 15. スプリングブート:複数のRestControllersの共通パスを設定する方法
- 16. カスタム入力メソッドを呼び出す/設定する方法は?
- 17. jUnitがテスト・コンテキストを設定するまで@PostConstructの呼び出しを延期する方法
- 18. 春データモンゴリポジトリ::すべてのレポの問題に共通の共有方法
- 19. 共有ライブラリを構築して他のndkプログラムで呼び出す方法
- 20. windbgの特定の呼び出しスタックフレームのレジスタ値を調べる方法
- 21. 呼び出し方法とクラス名を調べる方法は?
- 22. JSONP呼び出しをSencha TouchでSynchronousに設定する方法は?
- 23. Rakeテストがタスクdb:test:prepareを呼び出すのを防ぐ方法
- 24. MySQLストアドプロシージャを呼び出すJavaの単体テスト方法は?
- 25. テストプロジェクトのglobal.asaxにある設定メソッドを呼び出す方法は?
- 26. 呼び出し方法
- 27. 呼び出し方法Ruby1.9
- 28. すべてのアクティビティに共通のTabView
- 29. Matlab xUnit Frameworkテストスイートの設定
- 30. IA32のsys_read呼び出しのバッファを定義する方法
リンクのほとんどが死んでいます。 – Nadar