8

ClassInitializeは、すべてのテストで呼び出されているようです。実際には、テストごとに新しいクラスが作成されるためだと思います。

なんで?他のすべてのフレームワークはこれを行いません!

とにかく...クラスで1つのメソッド(静的ではない)を実行する必要があります。また、クラスの同じインスタンス内ですべてのテストメソッドを実行する必要があります。

私はパドルなしで小川を上っていますか?

4

1 に答える 1

17

ClassInitializeのいずれかが呼び出される前に、MSTestによって1回呼び出されます。ここTestMethodの注釈を参照してください。各テストメソッドの前に1回呼び出されます。MSTestは、呼び出しごとにテストクラスの新しいインスタンスを作成します。これが静的メソッドである理由です。TestInitializeTestMethodClassInitialize

クラスで1つのメソッド(静的ではない)を実行する必要があります。また、クラスの同じインスタンス内ですべてのテストメソッドを実行する必要があります。

TestClassまたは、テスト対象のクラス(実際にテストしているクラス)で1つのメソッドを実行する必要があるということですか?

いずれの場合も、に静的メンバーTestClassを設定し、で1回初期化することができますClassInitialize。これは一度だけ作成され、テストの存続期間中存在します。メソッドを呼び出すことができるのは1回だけです。その後、この単一のインスタンスを各テストメソッドで使用できます。

注意すべきことの1つは、MSTestが異なるクラスのテストをインターリーブする可能性があることです。したがって、複数からアクセスされるClassInitialize(またはその問題をテストする)グローバルな可変状態がある場合、予測できないことが発生する可能性があります。そのため、静力学は避けるのが最善です。

すべてのメソッドを同じインスタンスで実行する必要があるという要件は、非常に珍しいものです。おそらく、この制約を排除するためにコードをリファクタリングする方法はありますか?

于 2012-07-19T22:55:33.847 に答える