Ответ 1
OneTimeSetUpAttribute может использоваться двумя способами.
В первом он помечает метод в тестовом приспособлении, который запускается один раз перед любыми другими тестами в этом исправлении. Вот как вы его используете, наследуя от базового класса. OneTimeSetUp, благодаря наследованию, появляется в каждом ваших производных осветителях, но он все еще выполняется несколько раз, по одному для каждого осветителя.
Второе использование в SetUpFixture. Если вы создаете SetUpFixture в определенном пространстве имен, его метод OneTimeSetUp будет запускаться один раз перед любыми другими тестами в этом пространстве имен. Если вы создадите SetUpFixture вне какого-либо пространства имен, его OneTimeSetUp будет запускаться один раз перед любыми тестами в сборке.
ОБНОВЛЕНИЕ: кто-то предложил, чтобы в последнем предложении говорилось "за пределами любого пространства имен, содержащего TestFixture". Это было бы на самом деле неправильно. SetUpFixture должен находиться вне любого пространства имен, чтобы функционировать на уровне сборки. Если существует пространство имен верхнего уровня, которое содержит весь тестовый код, то вы также можете разместить там SetUpFixture, примерно с тем же эффектом. Но если он находится в пространстве имен, в котором нет тестов, он никогда не будет запущен.
Для получения дополнительной информации о SetUpFixture см. документы.