MSTestのテストクラスでインスタンス変数を初期化することをお勧めします。私がテストクラスを持っていて、サポート対象を嘲笑してセットアップするためのオーバーヘッドがたくさんあるとしましょう。私は各テストで同じコードを繰り返すのではなく、これを1回だけしたいと思います。私の考えは、MyClassInitializeメソッドを使用して、すべてのテストがアクセスできるグローバルインスタンス変数をいくつか初期化することでした。こうすることで、グローバルインスタンス変数を一度初期化し、実行するたびに各テストで使用されます。MSTest、MyClassInitialize、およびインスタンス変数
残念ながら、MyClassInitializeメソッドは静的なので、グローバルインスタンス変数を初期化することはできません。グローバルなインスタンス変数を静的にすることを考えましたが、適切な解決策ではないようです。次に、テストクラス自体のコンストラクタに初期化コードを置くことについて考えましたが、私の中の何かが、MyClassInitializeが私が使用するはずのものであると言っています。別の考え方は、そのメソッドが静的ではないので、MyTestInitializeを使用することですが、それは各テストでオブジェクトを繰り返し作成することになります。それは適切ですか?
テストを実行する前にこれらの変数を一度しか初期化する必要がないテストで変数を使用する方法のベストプラクティスはありますか?以下は、私が話していることの人為的な例です。
[TestClass()]
public class ProgramTest
{
// this object requires extensive setup so would like to just do it once
private SomeObjectThatIsUsedByAllTestsAndNeedsInitialization myObject;
private TestContext testContextInstance;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// initializing SomeObjectThatIsUsedByAllTestsAndNeedsInitialization clearly will
// not work here because this method is static.
}
[TestMethod()]
public void Test1()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test2()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test3()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
}
静的で私の問題を本当に定量化できません。それはちょうど "感じる"権利はありませんが、私は理由を説明することはできません。 – meyousikmann
静的とは、クラスが所有していることを意味します。静的でないものはクラスのインスタンスによって所有されます。物事が静的でなければならないかどうかを判断しようとするときには、自分自身に「これはクラス全体が所有するのか、それとも単なるインスタンスであるのですか? – Tristan