Невозможно запустить модульные тесты в папке Bin С#

Фон: у меня есть сторонняя библиотека классов, которая использует typeof(myClassFactory).Assembly.Location для определения своего местоположения, а затем использует ее для загрузки другой dll. Это ломается, потому что вторая dll не копируется во временное место. Поэтому я хочу, чтобы модульные тесты запускались из папки /bin. Я использую Vs2017 pro с xUnit и пробовал VS test runner и resharper, и оба ведут себя одинаково.

Что я пробовал до сих пор: я пытался создать файл test.runsettings и установить следующее:

<DeploymentEnabled>false</DeploymentEnabled>

как предлагается здесь Как запустить модульный тест в папке bin

однако код все еще выполняется в c:/users/myuserName/Local/Temp/{someGuid}/{someguid}/....etc

Вопрос: как запустить его в каталоге /bin?


person Mr Giggles    schedule 03.09.2018    source источник
comment
Подумайте о редизайне. абстрагироваться от этого, поскольку это проблема реализации. Таким образом, вы можете издеваться над ним при тестировании на любом пути, который вы хотите.   -  person Nkosi    schedule 03.09.2018
comment
Привет, спасибо за поиск. Код существует внутри тестируемой библиотеки DLL и используется для загрузки дополнительных ресурсов. Это также устаревший код, который вряд ли будет переработан для обеспечения модульного тестирования.   -  person Mr Giggles    schedule 03.09.2018
comment
Добавить прямую ссылку на отсутствующую dll в тестовый проект? Это может заставить VS скопировать его туда, где он должен быть.   -  person MarcE    schedule 03.09.2018


Ответы (1)


Я нашел свою проблему, она была связана с тем, что xUnit не использовал файл .runsettings.

Чтобы исправить это, я добавил новый файл с именем xunit.runner.json и добавил следующий код:

{ "shadowCopy": false }

Я добавил это в корень решения, а затем установил его для копирования в выходной файл, щелкнув правой кнопкой мыши файл:

Свойства > Копировать в выходной каталог

установите «Копировать, если новее»

Это заставило его работать

person Mr Giggles    schedule 03.09.2018