JUnit TestCaseオブジェクトのインスタンス化
-
05-07-2019 - |
質問
TestCase
オブジェクトの新しい(または異なる)インスタンスは、JUnitテストケースの各テストメソッドの実行に使用されますか?または、1つのインスタンスがすべてのテストに再利用されますか?
public class MyTest extends TestCase {
public void testSomething() { ... }
public void testSomethingElse() { ... }
}
このテストの実行中に、 MyTest
クラスのインスタンスがいくつ作成されますか?
可能であれば、動作を確認できるドキュメントまたはソースコードへのリンクを提供します。
解決
あなたの質問についてJUnitドキュメントで明確な答えを見つけることができませんでしたが、anjanbが書いたように、各テストは他のテストから独立しているため、各テストに対して新しいTestCaseインスタンスを作成できます実行します。
テストクラスのすべてのテストケースで共有したい高価なテストセットアップ(" フィクスチャ")がある場合は、 @BeforeClass この結果を達成するための静的メソッドの注釈: http://junit.sourceforge .net / javadoc_40 / org / junit / BeforeClass.html 。ただし、テストごとに新しいインスタンスが作成される場合がありますが、@ BeforeTestメソッドが初期化した静的データには影響しません。
他のヒント
はい、別のインスタンスが作成されます。
そのテストの実行中に、MyTestの2つのインスタンスが作成されます。
異なる動作が必要な場合、TestNG( http://testng.orgと呼ばれる同様のツールを使用することが1つのオプションです/ doc / )。
テストの実行ごとに1つのインスタンスがあります。お試しください
public class MyTest extends TestCase {
public MyTest() { System.out.println("MyTest Constructor");
public void setUp() { System.out.println("MyTest setUp");
public void tearDown() { System.out.println("MyTest tearDown");
public void testSomething() { System.out.println("MyTest testSomething");
public void testSomethingElse() { System.out.println("MyTest testSomethingElse");
}
ソースコード(新しいバージョンへのコードを含む-私の例はJunit 3)は http:// wwwにあります。 junit.org
コンストラクタでデータが初期化および再初期化されることを懸念しているため、これを要求する場合、テストケースデータを初期化するための規定の方法はsetUp()およびtearDown()のみを使用することに注意してください。
はい、間違いなく。この設計により、インスタンス変数に保存したデータにテスト間でアクセスできないことがわかりました。