0

宣言の順序に基づいてテストが成功または失敗するケースを扱っています。これはもちろん、テストが適切に分離されていないことを示しています。しかし、私は問題を見つける方法について困惑しています。問題は、私のjunitテストが、junit上に構築されたテストフレームワークに属し、いくつかの依存性注入コンテナを持つクラスから派生していることです。コンテナーは、基本クラスのセットアップによってテストごとにリセットされるため、コンテナー自体が新しいため、少なくともコンテナー内に残留オブジェクトはありません。だから私は次のシナリオに傾いています。

  1. test1 は、classA.somestaticMember を xyz 値に設定する classA を間接的に引き起こします。test obj は classA への参照を直接保持していませんが、test1 が終了すると、classA は vm によって値 xyz でロードされます。
  2. test2 は classA にアクセスし、xyz 値を持つ staticmember でつまずきます。

問題は、a)これが実際に当てはまるかどうかわかりません-どうすればそれを見つけることができますか?コードで静的変数への参照を見つけることができないようです... b) junit にロードされたすべてのクラスをダンプし、すべてのテストメソッドに対して新たに実行するように指示する方法はありますか?

4

1 に答える 1

1

@Beforeのようにメソッドを宣言できます

@Before public void init()
{
    // set up stuff
}

JUnit は各テストの前にそれを実行します。それを使用して、「フィクスチャ」(テストが互いに独立して動作する既知の新しいオブジェクト、データなどのセット)を設定できます。

各テスト後に@After必要なクリーンアップを行うために使用できるもあります。Java は使用したオブジェクトをクリーンアップするため、通常はこれを行う必要はありませんが、外部オブジェクト (作成および制御しないもの) を既知の状態に復元するのに役立つ場合があります。

(ただし、テストを実行するために外部オブジェクトに依存している場合、それはもはや単体テストではありません。失敗がコードによるものなのか、外部オブジェクトによるものなのかを実際に言うことはできません。それが単体テストの目的の 1 つです。)

于 2011-10-11T00:39:04.330 に答える