Подтвердить что ты не робот

Какая разница между использованием конструктора в объекте VS Testing vs. TestInitialize()?

Быстрый вопрос. Я использую среду тестирования Visual Studio для модульного тестирования. Просто интересно, какая разница между использованием конструктора для работы по инициализации и наличием метода с атрибутом [TestInitialize()]?

4b9b3361

Ответ 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/....