4

JUnit 4 を使用していたときに質問があります。以下にメイン関数がないのに、実行してテスト結果を返すことができるのはなぜですか? クラスを拡張することすらありません。とても混乱しています....コードは次のとおりです。

import org.junit.runner.RunWith;    
import org.junit.runners.Suite;    
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)    
@SuiteClasses({ ATest.class,BTest.class })    
public class AllTests {

}
4

3 に答える 3

5

main メソッド (関数ではない) はランナー クラスに実装されています。ランナー クラスが IDE またはビルド ツールによって呼び出されると、ランナーは Test クラスをロードし、マークされた (つまり、@Test アノテーションによって) すべてのメソッドを実行します。

テストのライフサイクルは、メイン関数よりも少し複雑です。各 @Test を実行する前に準備 (@BeforeClass および @Before アノテーション付きメソッド) を行ってから、クリーンアップ (@After および @AfterClass アノテーション付きメソッド) を行うことができます。

このフレームワークにより、単一の main メソッドだけを使用するよりも柔軟性が高くなります。また、注釈付きのテストを個別に実行することもできます。巨大なテスト スイートがあるかもしれませんが、バグを修正しながら、失敗したテストだけを繰り返し実行したい場合があります。これは、メイン メソッドでは実行できません (すべてのテストにメイン メソッドがある場合を除きます)。

ご覧のとおり、JUnit のようなフレームワークを使用することには、メインを持つプレーンな Java クラスよりもいくつかの利点があります。

于 2012-12-23T15:12:27.710 に答える
0

それを行うのがテストランナーの役割です。main()JUnit < 4にもメソッドがありませんでした。JUnit 4 ランナーがアノテーションに依存しているのに対し、JUnit 3 ランナーはメソッド名に依存しているだけです。

于 2012-12-23T15:07:30.307 に答える