9

オブジェクトの新しい(または異なる)インスタンスをTestCase使用して、JUnitテストケースの各テストメソッドを実行していますか?または、1つのインスタンスがすべてのテストに再利用されますか?

public class MyTest extends TestCase {
  public void testSomething() { ... }
  public void testSomethingElse() { ... }
}

このテストの実行中に、MyTestクラスのインスタンスがいくつ作成されますか?

可能であれば、動作を確認できるドキュメントまたはソースコードへのリンクを提供してください。

4

5 に答える 5

8

はい、別のインスタンスが作成されます。

そのテストの実行中に、MyTest の 2 つのインスタンスが作成されます。

別の動作が必要な場合は、TestNG ( http://testng.org/doc/ ) と呼ばれる同様のツールを使用する方法があります。

于 2008-10-08T01:55:43.380 に答える
4

JUnitのドキュメントであなたの質問について明確な答えを見つけることができませんでしたが、anjanbが書いたように、各テストは他のテストから独立しているため、実行するテストごとに新しいTestCaseインスタンスを作成できます。

テストクラスのすべてのテストケースで共有したい高価なテストセットアップ(「フィクスチャ」)がある場合は、静的メソッドで@BeforeClassアノテーションを使用して、この結果を得ることができます: http://junit.sourceforge。 net / javadoc_40 / org / junit/BeforeClass.html。ただし、テストごとに新しいインスタンスが作成される可能性はありますが、@BeforeTestメソッドが初期化した静的データには影響しないことに注意してください。

于 2008-10-08T02:58:50.367 に答える
3

テストの実行ごとに 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にあります

于 2008-10-08T04:12:41.997 に答える
2

コンストラクターでデータが初期化および再初期化されることを懸念してこれを尋ねている場合は、テスト ケース データを初期化する規定の方法は、setUp() および tearDown() のみを使用することであることに注意してください。

于 2008-10-08T01:59:13.157 に答える
0

はい、間違いなく。この設計により、インスタンス変数に保存したデータにテスト間でアクセスできないことがわかりました。

于 2010-07-08T14:38:26.643 に答える