#c# #unit-testing #visual-studio-2017 #mstest
#c# #модульное тестирование #visual-studio-2017 #mstest
Вопрос:
Я использую Visual Studio 2017 Enterprise и MSTest V2. В моем решении есть несколько проектов модульного тестирования. В одном проекте у меня есть модульные тесты, которые проверяют загрузку ресурсов из каталога установки. Большинство проверяет правильность загрузки ресурсов, но некоторые удаляют ресурс, чтобы убедиться, что и это обрабатывается правильно.
Проблема, с которой я сталкиваюсь, заключается в том, что тесты выполняются параллельно. Следовательно, тесты, которые удаляют ресурсы, делают это одновременно с выполнением тестов, которые загружают ресурсы, и я получаю неудачные тесты.
Я понимаю, что могу решить эту проблему, обновив свой код для отправки каталога в поиск, или запустив один набор тестов, а затем следующий, но я бы предпочел иметь возможность запускать все тесты сразу. Похоже, что MSTest v2 должен выполняться последовательно, если иное не указано для параллельного выполнения, но в моей системе это явно неверно. Также кажется, что упорядоченный тест не работает с v2. Есть ли способ заставить MSTest V2 выполняться последовательно?
Комментарии:
1. У меня такая же проблема с MSTest, и мне было интересно, смогли ли вы это решить?
2. @user1207289 — Мне не удалось запустить его последовательно. Я переключился на NUnit для моего следующего проекта. Для этого, в котором уже были тесты, я использовал locked для объекта, чтобы принудительно выполнить последовательную обработку методами, где это требовалось. Не лучший способ, но это было единственное решение, которое я смог найти.
Ответ №1:
- MSTest v2 не будет поддерживать проблему с упорядоченными тестами
- возможно, вы установили область распараллеливания в файле testsettings или файле сборки https://www.meziantou.net/mstest-v2-execute-tests-in-parallel.htm Если вы удалите это, он будет выполняться последовательно
Я бы сказал, что вы можете создать флаг и обновить его из зависимого теста, проверьте статус флага перед очисткой ресурса. может быть словарем testname и status, как только это будет сделано, выполните этот тест или дождитесь завершения этого теста. вы можете реализовать пользовательскую логику для этого.
Ответ №2:
Чтобы тесты выполнялись последовательно, установите MaxCpuCount равным 1 в вашем файле .runsettings, для получения дополнительной информации смотрите: Настройте модульные тесты с помощью файла .runsettings.
Комментарии:
1. Спасибо за предложение, но, к сожалению, это не сработало. Согласно документации, «Механизм выполнения тестов запускается как отдельный процесс на каждом доступном ядре и предоставляет каждому ядру контейнер с тестами для запуска». Похоже, что эти тесты по-прежнему выполняются параллельно, но ограничены одним ядром.
2. Согласно связанным документам, значение по умолчанию равно 1. Таким образом, это неверно, если предположить, что у пользователя еще нет файла .runsettings.