Почему у меня возникает другое поведение при нажатии кнопки Resharper "Запустить все тесты" или с помощью команды быстрого вызова клавиатуры?

Код, который я тестирую, относится к appsetting в файле app.config. Чтобы удовлетворить это, я добавил файл app.config в свой проект модульных тестов. Если я нажму на значок "Запустить все тесты" в окне Unit Test Sessions, все мои тесты пройдут.

Я отобразил команду ReSharper.ReSharper_UnitTest_RunSolution для Ctrl + Shift + Alt + U. Если я запускаю тесты, нажимая эту комбинацию, все тесты выполняются, но они не могут найти приложение, которое приходит через нуль.

Я предполагаю, что это означает, что нажатие кнопки запускается в контексте тестового проекта, в то время как команда этого не делает, но я не могу полностью понять, что делает команда.

Я отобразил неверную команду?

РЕДАКТИРОВАТЬ 1: Я также попытался использовать сочетание клавиш Alt-RUN (Resharper > Unit Tests > Run All), а также щелкнуть меню вручную и обнаружил, что это также вызывает все единичные тесты на не найти аппетит и, следовательно, сбой. Нажатие кнопки "Выполнить все тесты" в Unit Test Сессии (двойная зеленая стрелка) продолжает работать нормально.

РЕДАКТИРОВАТЬ 2: Я понял, что, вероятно, должен быть издевательством над отдельным классом, который все равно извлекает настройки приложения из файла конфигурации, так что это то, что я сейчас делаю. Так что теперь нет никакой зависимости от файла конфигурации при модульном тестировании.

Ответ 1

Здесь есть две вещи. Во-первых, значок "Запуск всех тестов" в окне сеансов запускает все тесты в сеансе, в то время как в меню "Выполнить все тесты" выполняются все тесты в решении. Чуть сбив с толку, что у них одно и то же имя, но это имеет смысл с учетом контекста. Вот почему они дают разные результаты.

Во-вторых, при выполнении всех тестов в решении установка приложения может не найти. Это связано с оптимизацией, которую проводит тестовый бегун, который запускает все тесты в том же AppDomain. Это позволяет избежать накладных расходов на создание нового AppDomain для каждой сборки, но имеет недостаток, что для всех сборок будет использоваться только один app.config. Если он выбирает неправильный, настройки вашего приложения теряются.

Вы можете отключить это, сняв флажок ReSharper "Опции" Unit Testing "Используйте отдельную AppDomain для каждой сборки с тестами". В идеале, он должен быть отключен, если какой-либо проект имеет app.config - я добавил запрос функции, на который вы можете проголосовать и отслеживать: https://youtrack.jetbrains.com/issue/RSRP-428958