У меня есть куча тестов xUnit для тестирования различных поведений класса, поведение которого определяется переменными среды. Это не проблема. Проблема заключается в том, что переменные среды являются для каждого процесса, а не для каждого потока, и тесты мешают друг другу при параллельной работе. Кроме добавления в мьютексы и т. Д., Мне еще предстоит найти какой-либо способ управления параллелизмом, когда полный набор тестов запускается через Visual Studio (я знаю, что это можно сделать при запуске из командной строки, но это не так, как большинстворазработчики собираются на работу). Очевидно, есть несколько возможных решений, в том числе использование чего-то вроде библиотеки Fakes, чтобы обезьяна исправлять поведение Environment.GetEnvironmentVariable, или даже переписывание тестируемого кода, чтобы можно было заменить другой метод получения параметров конфигурации, но похоже, чтодолжен быть более простой способ.
На самом деле, как это бывает, единственный тест, который действительно дает мне горе, - это специальный тест, который когда-либо предназначался только для индивидуального выполнения, когда это необходимо для проведения сквозного тестирования (например,рассылает настоящие электронные письма и т. д.), но xUnit, похоже, не обеспечивает способ проверить это, что немного раздражает - на самом деле способ, которым мы запрещаем запускать его как часть сборки ci, заключается в проверке того, что онна машине с Windows на данный момент отдельные разработчики обычно работают на Windows, а ci работает на компьютерах Mac и Linux! Другой вариант, который я рассмотрел, состоял в том, чтобы пропустить тест, если у вас не подключен отладчик, но удобно просто иметь возможность «запустить» его без отладки и убедиться, что он выполняет все, что ожидалось.
Конечно, есть другие разработчики, которые сталкивались с подобными проблемами?