Почему [AssemblyInitialize] и [AssemblyCleanup] дважды вызываются в одной сборке тестового проекта?

Я думал, что вся цель этих атрибутов - запускать их только один раз для каждой сборки. У меня есть следующий простой класс:

[TestClass]
public class AssemblyIntegrationTestSetup
{
    public AssemblyIntegrationTestSetup() { }
    public TestContext TestContext { get; set; }

    [AssemblyInitialize]
    public static void SetupIntegrationTests(TestContext context)
    {
         WindowsServiceService.Instance.StartService("Distributed Transaction Coordinator");
    }

    [AssemblyCleanup]
    public static void TeardownIntegrationTests()
    {
          WindowsServiceService.Instance.StopService("Distributed Transaction Coordinator");
    }

}

Однако, когда я запускаю набор тестов, методы Initialize и Cleanup на уровне сборки выполняются дважды. Вот подробности о моем окружении:

  1. Все тестовые классы находятся в одном проекте / сборке.
  2. У меня есть интеграционные и модульные тесты, разделенные пространством имен.
  3. Для интеграционных тестов я использую MSTextExtensions, чтобы разрешить откат транзакций базы данных.
  4. Я также запускаю / останавливаю службу DTC MS SQL Server, которая требуется для возможности отката. Я хотел сделать это один раз за запуск набора тестов (и лучшим компромиссом, который я нашел, было использование атрибутов уровня сборки). Код будет работать, но выполняется дважды.
  5. Если это важно, я ' m с использованием Microsoft Moles Framework в некоторых из моих тестов.

Наблюдаемое поведение похоже на:

AssemblyInitialize         

Class1.TestInitialize
Class1.TestMethod1
Class1.TestCleanup

AssemblyInitalize         <-- //This shouldn't be happening right?

Class2.TestInitialize
Class2.TestMethod1
Class2.TestCleanup

Class2.TestInitialize
Class2.TestMethod2
Class2.TestCleanup

Class5.TestInitialize
Class5.TestMethod1
Class5.TestCleanup

Class7.TestInitialize
Class7.TestMethod1
Class7.TestCleanup

//More random bouncing around then...

AssemblyCleanup 
AssemblyCleanup           <-- //This shouldn't be happening right?
9
задан Matt 10 June 2011 в 23:13
поделиться