1

.NET背景:実行するためにいくつかの構成データをセットアップする必要がある単体テストがたくさんあります。最初はTestInitializeandを使用TestCleanupして、各テストに関する構成データをセットアップおよび破棄していました。ただし、一連のテスト全体に対して 1 つのセットアップで十分なので、代わりにClassInitializeandを使用することをお勧めしますClassCleanup

問題: 属性を から に変更しTestInitializeClassInitializeテストを実行すると、次のエラーが発生します。

MyTestClass.ClassInit の署名が間違っています。メソッドは static とマークする必要があります。

メソッドを静的にする必要があるこの属性の背後にある設計上の理由は何ですか? テスト メソッドはすべてインスタンス メソッドであるため、それらを実行するために、テスト クラスのインスタンスが少なくとも 1 つどこかに作成されていると想定します。そのインスタンスがその後のクリーンアップを担当しないのはなぜですか?

私はMSDNを確認しましたが、静的要件については明示的に言及していませんが、その使用法の良い例があります。

4

1 に答える 1

2

MSDN がClassInitializeAttribute を述べているように

テスト クラス内のいずれかのテストを実行する前に使用し、テスト クラスで使用するリソースを割り当てる必要があるコードを含むメソッドを識別します。このクラスは継承できません。

これがどこで手に入るかについて私が考えることができる1つの例は、インスタンスのコンストラクターが依存するクラスに静的フィールドがある場合です。

class foo
{
  static someObject bar;
  int foobar;

  public foo()
  {
    this.foobar = foo.bar.SomeMethod()
  }
}

このようにして、ClassInitializeAttributeメソッドで静的オブジェクトに値を割り当てることができbarます。これは、後で作成されるすべてのインスタンスに影響します。

を使用する別のケースとして、テストで使用する可能性のあるグローバル オブジェクト (モックデータベースなど)ClassInitializeAttributeを割り当てる場合があります。

于 2013-10-01T06:03:47.860 に答える