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