Можно ли выполнить код один раз перед выполнением всех тестов? - PullRequest
95 голосов
/ 04 марта 2010

По сути, я хотел бы сказать MSTest выполнить немного кода перед запуском в серию тестовых прогонов, по сути, я хотел бы сделать то же самое, что вставить код в Main().

Причина, по которой я хотел бы сделать это, состоит в том, что я хотел бы сделать некоторую регистрацию с log4net во время моих тестов интеграции. Я не могу просто использовать атрибут сборки log4net.Config.XmlConfigurator, поскольку к тому моменту, когда он читает его в моей тестовой сборке, он уже вызвал LoggerManager. В документации рекомендуется явно настроить log4net в точке ввода кода, но где это в моих тестах?

Мне нужно иметь возможность запускать свои тесты в TestDriven.NET и MSTest Runner.

Ответы [ 3 ]

131 голосов
/ 04 марта 2010

FWIW, вы можете использовать атрибут AssemblyInitialize для запуска кода перед выполнением всех модульных тестов в сборке:

[TestClass]
public class SetupAssemblyInitializer
{
    [AssemblyInitialize]
    public static void AssemblyInit(TestContext context)
    {
        // Initalization code goes here
    }
}

Если у вас более одной сборки модульного теста, я 'Я не знаю ничего, что включает в себя более одной сборки.

Насколько я знаю, это настолько близко, насколько вы можете добраться до основного эквивалента.

Обратите внимание, что AssemblyInitialize -decorated метод должен быть в TestClass -децензированном классе, который содержит по крайней мере один TestMethod -дефорированный метод, в противном случае он будет не выполняться!

42 голосов
/ 28 января 2016

Для завершения, это параметры «выполнить код перед» для MSTest:

  • Используйте [AssemblyInitialize] для запуска кода один раз для каждой сборки перед запуском любого теста в этой сборке.
  • Используйте [ClassInitialize] для запуска кода один раз для каждого класса перед любым тестом в классе, где определен метод.
  • Используйте [TestInitialize] для запуска кода перед каждым тестом в классе, где методопределены.
11 голосов
/ 04 марта 2010

Я вижу это в заголовке MS Test.

// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }

Это будет выполнено перед тестами в одном классе.

Звучит так, будто вы хотите запустить что-то перед всеми тестами.

В конфигурации для тестового запуска также есть опция сценария установки.

...