Как вы установили, класс TestFixture создается один раз перед вызовом OneTimeSetUp
;затем для каждого теста запускается набор SetUp
, Test
и TearDown
;и, наконец, OneTimeTearDown
.
Если вы хотите, чтобы тесты выполнялись параллельно (что не является значением по умолчанию), вы должны указать Параллельный атрибут .Независимо от того, делаете ли вы это или нет, неплохо бы, чтобы ваши тесты были написаны независимо, поэтому они не конфликтуют друг с другом - их необходимо структурировать.
AAA (Arrange, Act, Assert)шаблон является распространенным способом структурирования модульных тестов для тестируемого метода.Если ваши тесты должны выполняться параллельно, то поля TestFixture не подходят для хранения информации, которая может конфликтовать между параллельными тестами, так же, как это не подходит для многопоточного класса.
I 'Рекомендуется использовать закрытый метод в TestFixture для настройки временной папки - для этого потребуется какой-то способ предоставления уникального имени папки, чтобы параллельные тесты не взаимодействовали - возможно, используйте Guid или CallerMemberName как часть папкиname и вернуть имя папки.
Этот метод следует вызывать из части Arrange теста.И вам понадобится попытка ... наконец обернуть оставшуюся часть теста, чтобы убедиться, что папка разрушена.Или вы могли бы пойти с вашей идеей IDisposable - я не думаю, что с этим что-то не так: весь смысл в том, чтобы гарантировать приведение в порядок ресурсов (как управляемых, так и неуправляемых), когда что-то выходит за рамки.
Ваше второе предложение делегата также было бы хорошо, если бы вы использовали лямбда-выражения, а не строго определенные делегаты - лямбда-выражение может захватывать переменные из содержащей области.