Visual Studio 2008 内で MSTEST を使用しています。各テストを実行する前にすべてのグローバル状態がリセットされるように、特定のテスト クラスの各単体テスト メソッドを最初に実行するテストであるかのように動作させるにはどうすればよいですか? TestInitialize、ClassInitialize、AssemblyInitialize などを使用して明示的に世界をクリーンアップしたくありません。例:
[TestClass]
public class MyClassTests
{
[TestMethod]
public void Test1()
{
// The "Instance" property creates a new instance of "SomeSingleton"
// if it hasn't been created before.
var i1 = SomeSingleton.Instance;
...
}
[TestMethod]
public void Test2()
{
// When I select "Test1" and "Test2" to run, I'd like Test2
// to have a new AppDomain feel so that the static variable inside
// of "SomeSingleton" is reset (it was previously set in Test1) on
// the call to ".Instance"
var i2 = SomeSingleton.Instance;
// some code
}
このトピックには同様の質問がありましたが、テストが並行して実行されないことが明確になっただけです。テストが連続して実行されることはわかっていますが、メソッドごとに新しい AppDomain を明示的に強制する方法 (またはすべての状態をクリアする同等のもの) はないようです。
理想的には、単体テストの小さなサブセットに対してのみこの動作を指定して、グローバル状態を気にしないテストのために新しい AppDomain を作成するというペナルティを支払う必要がないようにしたいと考えています (大部分の私のテスト)。