Быстрый вопрос. Я использую среду тестирования Visual Studio для модульного тестирования. Просто интересно, какая разница между использованием конструктора для работы по инициализации и наличием метода с атрибутом [TestInitialize()]?
Какая разница между использованием конструктора в объекте VS Testing vs. TestInitialize()?
Ответ 1
В этом сообщении дается обзор различных методов. Как вы можете видеть, ctor вызывается непосредственно перед ClassInitialize (только один раз, конечно) и TestInitialize.
Итак, поставьте материал, который требует кода в ClassInitialize в вашем методе TestInitialize. Все, что должно быть установлено до ClassInitialize, идет в ctor.
Очевидно, что содержание TestInitialize будет выполнено один раз перед каждым тестом. Соответствующий метод для закрытия после каждого теста TestCleanup. Для классов используйте ClassCleanup. То же самое существует и для сборок (AssemblyInitialize/Cleanup).
Ответ 2
ctor предназначен для инициализации объекта.
TestInitialize предназначен для инициализации любых объектов или данных, необходимых для запуска теста.
Ответ 3
Концептуально они такие же, как MSTest создает новый экземпляр вашего тестового класса перед каждым выполнением теста. Однако технически существует несколько отличий:
- ctor вызывается до
TestInitialize(неудивительно, поскольку последний является методом экземпляра). - У вас есть доступ к
TestContextвTestInitialize. - Дополнительные сценарии наследования активируются с помощью
TestInitialize: fooobar.com/info/86838/.... - Вы можете назначить поля
readonlyв ctor. Я думаю, что это очень важно: fooobar.com/info/86838/....