Модульный тест VisualStudio не находит мою DLL с помощью P / Invoke. Как я могу это исправить? - PullRequest
3 голосов
/ 20 августа 2010

Я работаю в Windows 7 с Visual Studio 2008.

У меня есть сборка .NET, которая делает вызовы в собственную DLL с помощью P / Invoke.Я настроил отдельный проект модульного тестирования .NET в своем решении Visual Studio, которое тестирует сборку, делая в нее различные вызовы.Однако, когда модульный тест выполняет вызов в сборку, а сборка выполняет вызов с использованием P / Invoke, он не может найти собственную DLL.

Когда я пишу отдельное консольное приложение .NET, появляетсяне проблемаСборка может использовать P / Invoke и успешно найти DLL.

Я могу заставить модульный тест работать, вызвав LoadLibrary с абсолютным путем к DLL перед использованием сборки.Однако этот подход уродлив и требует абсолютного пути - что будет проблематично для других пользователей.

Короче говоря, мой вопрос - как я могу указать или изменить путь поиска DLL, который используется, когда VisualВыполняется студийный юнит-тест?

Любая помощь будет принята с благодарностью.

С уважением, Дэн

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011

Если вы используете интегрированную среду тестирования Visual Studio 2008, вам следует проверить класс DeploymentItemAttribute

По сути, вы просто украшаете свой метод тестирования этим атрибутом, и он автоматически копирует элемент развертывания в выходной каталог перед выполнением теста. Вы даже можете скопировать целое дерево зависимостей, используя это. Он поддерживает расширение переменных и относительные пути.

Также см. Как: настроить тестовое развертывание для получения более общей информации о тестовом развертывании VS2008.

3 голосов
/ 20 августа 2010

Похоже, проблема в том, что ваша нативная DLL не развертывается с вашими DLL модульного тестирования.Это не редкая проблема, поскольку управляемые DLL не имеют ссылок на собственные в метаданных и, следовательно, пакеты развертывания не знают, как их развертывать.

Наиболее подходящим решением является исправление развертывания, а не изменение путей поиска DLL.Это специфическая проблема для юнит-теста.Можете ли вы сказать нам, какую платформу вы используете, чтобы мы могли вам помочь?

0 голосов
/ 11 марта 2016

Мое решение было добавить команду post build в мой тестовый проект следующим образом:

xcopy /Y /S "$(SolutionDir)\ShredLibraries\*" "$(TargetDir)"

это объясняется в документах msdn: https://msdn.microsoft.com/en-us/library/ms182475.aspx

...