3

インターフェイスの実装用のテストクラスを作成していて、実装を別の実装に対してテストしたい(つまり、一貫性を確保するため)。次に、テストメソッドは各インターフェイスメソッドをテストして、これをチェックします。

これを行うには、次のことができます。

a)private static元の実装と私の新しい実装の定数フィールドを作成します。

public class MyImplTest extends TestCase {

  private static OldImpl _original;
  private static MyImpl _myImpl;
  static {
    // instantiate _original and _myImpl
  }

  // My tests
}

b)private2つの実装のフィールドを作成し、以下を使用してそれらをインスタンス化しますsetUp()

public class MyImplTest extends TestCase {
  private OldImpl _original;
  private MyImpl _myImpl;

  public void setUp(){
    // instantiate _original and _myImpl
  }

  // My tests
}

これらのどちらかが好ましい/良いスタイルと見なされますか?私の本能は(b)を示唆していますが、非常に大きなオブジェクトを作成したいので、のメソッドsetUp()ごとに実行されるため、両方とも複数回作成されます。testSomething()TestCase_original_myImpl

FWIW、私はJUnit3を使用しています。

4

1 に答える 1

6

setupメソッドを使用すると、各テストの前に初期化コードが実行されます。静的初期化子は、クラスが最初にロードされたときに1回(および1回だけ)実行されます。つまり、テストの実行ごとに1回だけ実行されます。

多くの場合、他のテストに影響を与える1つのテストからオブジェクトの状態の機能を削除するために、テストごとにすべてを新しく初期化することをお勧めします。

静的初期化を使用することが有用であることがわかったのは、統合(ユニットではなく)テストを作成していて、テスト対象のクラスの構築に費用がかかったときだけでした。テストが互いに干渉しないように、オブジェクトはステートレスであると確信していました。確信が持てない場合は、安全のためにsetup()メソッドを使用することをお勧めします。

于 2012-05-10T14:23:04.123 に答える