Быстрый вопрос. Я использую среду тестирования 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/....