Если я правильно понимаю, код, который вызывает Directory.GetCurrentDirectory
, находится в библиотеке, используемой приложением, которое вы тестируете. (Если бы это было в ваших собственных тестах NUnit, то этот ответ должен был бы быть другим.) Это неверный выбор дизайна для кода библиотеки, поскольку предполагается, что приложение, вызывающее библиотеку, установило (или оставило) текущий каталог в подходящее место. (ИМО, это нормально для приложения, но не для библиотеки.)
Я предполагаю, что вы работаете в Visual Studio, поскольку текущим каталогом является System32.
По своей сути, NUnit никогда не изменяет текущий каталог, поэтому он остается таким же, каким он был при первом запуске программы. Вы можете изменить это в своих тестах, но при этом есть риски.
Это объясняет, почему вы видите проблему. Вот обходной путь.
Если вам все равно (для целей тестирования), где находится папка, создайте временную папку в настройках теста и удалите ее в разборке. Это можно сделать для каждого теста (SetUp и TearDown) или для всего прибора (OneTimeSetUp и OneTimeTearDown).
В том же месте установки установите текущий каталог в эту временную папку, сохранив исходный текущий каталог. Восстановите его соответствующим способом разрыва.
Убедитесь, что никакие тесты с использованием каталога не могут выполняться параллельно. Если вы вообще не используете ParallelizableAttribute
, все будет в порядке. Но если вы установили какое-либо значение на сборке или другом более высоком уровне, пометьте классы, содержащие эти тесты, как [NonParallelizable]
.
Последний шаг очень важен. Текущий каталог устанавливается для всего процесса, поэтому он влияет на все выполняющиеся тесты. Важно, чтобы никакие другие тесты не выполнялись, пока действует измененный каталог.