Я использую MSTEST в Visual Studio 2008. Как можно, чтобы каждый метод модульного теста в определенном классе теста действовал так, как если бы это был первый тест для запуска, чтобы все глобальные состояния были сброшены перед выполнением каждого теста? Я не хочу явно очищать мир, используя 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 за тесты, которые не заботятся о глобальном состоянии ( Подавляющее большинство моих тестов).