Определить путь решения во время выполнения теста - PullRequest
4 голосов
/ 29 сентября 2010

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

Я пытаюсь написать тесты для архитектуры плагина.У меня есть несколько поддельных классов, которые реализуют мой интерфейс плагина в отдельном проекте в моем решении.После этой сборки dll копируется в папку «plugins» с использованием события после сборки:

copy "$(TargetPath)" "$(SolutionDir)TestPlugins"

Мой тестовый код ищет плагины в этом месте и загружает типы плагинов в коллекцию для последующего использования.

В настоящий момент мне приходится жестко кодировать путь к папке «плагинов» в моем тесте, что неприятно.

О, и я использую встроенную Visual Studioтестовые проекты (а не NUnit), если это имеет значение.

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

Относительный путь работает, но нам нужно отследить от исполняющего двоичного файла, который скрыт в тестовом проекте.

string solutionPath = Directory
    .GetParent(Assembly.GetExecutingAssembly().Location)
    .Parent.Parent.Parent.FullName;

string pluginPath = Path.Combine(solutionPath, "TestPlugins");

Требуется следующее

using System.IO;
using System.Reflection;

Несамое элегантное решение, но оно работает.

1 голос
/ 29 сентября 2010

Одним из возможных решений было бы создание события после сборки, чтобы тестовый проект написал конфигурацию.Т.е. в соответствии с:

echo $(SolutionDir)TestPlugins > $(TargetDir)PluginConfig.cfg

И прочитайте файл конфигурации из ваших тестов.

0 голосов
/ 05 июня 2016

Чтобы добавить к ответу «Стюарта Ричи» (что, кстати, хорошо работает!), Количество аргументов «.Parent» зависит от того, как далеко вы хотите вернуть дерево к исполняемой сборке. Таким образом, если вы продолжаете получать IOExceptions, говорящие о том, что каталог не может быть найден, нужно проверить значение возвращенного solutionPath, чтобы определить, нужно ли вам добавить или удалить некоторые из уровней рекурсии, чтобы попасть по пути ищу.

- Удачного кодирования!

0 голосов
/ 29 сентября 2010

если вы знаете расположение плагинов относительно фактического решения, вы можете сделать относительный путь.Это все равно будет жестко закодировано, но небольшая полоска лучше, чем 100% жестко закодированный путь.Другой вариант - иметь файл настроек, в котором указывается путь к плагинам независимо от системы, так что вы можете просто прочитать эту настройку из файла и работать с ней таким образом.Дайте мне знать, если ни один из этих способов не сработает для вас, и я могу сообщить вам, что еще я могу придумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...