Я предполагаю, что ответом на мой комментарий является «Нет» и что вы используете текущую версию NUnit 3. Пожалуйста, исправьте меня, если я ошибаюсь. : -)
Вы заставили класс TestBase
выполнять две функции:
Это базовый класс для вашего TestFixture
и, следовательно, он сам по себе TestFixture
.
Он помечен как SetUpFixture
, поэтому он также выполняет эту функцию - кстати, совершенно другую функцию.
ясно, вы никогда не должны делать это. Это своего рода «трюк», который, кажется, почти предназначен для того, чтобы запутать NUnit - конечно, это не ваше намерение. Ваши тестовые приборы не должны иметь никаких отношений наследования с любым SetUpFixture
. Используйте разные классы для базы тестового прибора и установочного прибора.
С этим из дальней, вот более длинная история того, что происходит ...
- Перед вашими тестами даже если выполнить, SetUpFixture сначала «запускается» - в кавычках, потому что на самом деле ничего не делает. Это потому, что он не содержит методов, помеченных
[OneTimeSetUp]
или '[OneTimeTearDown] `.
ПРИМЕЧАНИЕ. В качестве альтернативного объяснения, если вы используете довольно старую версию NUnit , методы [SetUp]
и [TearDown]
на самом деле вызываются в этот момент. Nnit V2 использовал эти атрибуты с различными значениями, когда они встречались в SetUpFixture по сравнению с TestFixture.
Далее ваши тесты будут выполнены. Перед каждым тестом запускаются унаследованные
[SetUp]
и
[TearDown]
методы. Конечно, на самом деле это те же методы, что и в шаге 1. NUnit был обманут в этом!
Вот некоторые общие рекомендации на будущее ...
Если вы хотите, чтобы несколько приборов использовали одни и те же данные, полезно использовать базовый класс. Любые публичные c или защищенные поля или свойства будут совместно использоваться наследующими приборами.
Если вы хотите выполнить некоторые общие настройки или демонтаж для группы не связанных испытательные приборы, используйте SetUpFixture
. Обратите внимание, что единственный способ передачи данных из SetUpFixture
в тестовые приборы - через поля или свойства stati c. Обычно вы используете SetUpFixture
для настройки среды , в которой выполняется тест, а не для предоставления данных.
Никогда используйте один и тот же класс для обеих целей.