Можно ли выполнить код один раз перед запуском всех тестов?
В основном я хотел бы сказать MSTest, чтобы выполнить бит кода перед запуском в серию тестовых прогонов, по существу, то, что я хотел бы сделать, это то же самое, что придерживаться некоторого кода в Main()
.
Причина, по которой я хотел бы сделать это, - это то, что я хотел бы сделать некоторое ведение журнала с помощью log4net во время моих тестовых тестов интеграции. Я не могу просто использовать атрибут сборки log4net.Config.XmlConfigurator
, поскольку с момента его чтения в моей тестовой сборке он уже назвал LoggerManager
. Документация рекомендует явно настроить log4net в точке ввода кода, но где это в моих тестах?
Мне нужно иметь возможность запускать мои тесты в тестовом сервере TestDriven.NET и MSTest.
Ответы
Ответ 1
FWIW, вы можете использовать атрибут AssemblyInitialize для запуска кода перед выполнением всех модульных тестов в сборке:
[TestClass]
public class SetupAssemblyInitializer
{
[AssemblyInitialize]
public static void AssemblyInit(TestContext context)
{
// Initalization code goes here
}
}
Если у вас более одной сборки unit test, я не знаю ничего, что охватывает более одной сборки.
Насколько мне известно, это как можно ближе к эквиваленту Main.
Обратите внимание, что AssemblyInitialize
-декорированный метод должен находиться в TestClass
-декорированном классе, который содержит хотя бы один TestMethod
-декорированный метод, иначе он будет не выполняться!
Ответ 2
Для завершения это опции "запустить код до" для MSTest:
- Используйте
[AssemblyInitialize]
для запуска кода один раз для сборки, прежде чем запускается какой-либо тест в этой сборке.
- Используйте
[ClassInitialize]
для запуска кода один раз в классе перед любым тестом в классе, где определяется метод.
- Используйте
[TestInitialize]
для запуска кода перед каждым тестированием в классе, где определяется метод.
Ответ 3
Я вижу это в заголовке MS Test.
// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }
Это будет выполняться перед тестами в одном классе.
Похоже, вы хотите что-то запустить перед всеми тестами.
В конфигурации тестового запуска также есть параметр настройки script.