.NET: получение абсолютного пути к файлу при запуске VS Team Test - PullRequest
3 голосов
/ 27 марта 2009

В настоящее время у меня есть тестовый класс с именем TestClass.cs в C: \ Projects \ TestProject \ TestClass.cs
У меня также есть XML-файл в C: \ Projects \ TestProject \ config \ config.xml

В TestClass.cs у меня есть метод теста для загрузки Xml из файловой системы, например:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Path.Combine(Assembly.GetExecutingAssembly().Location, "config\config.xml"));

К сожалению, свойство Location дает мне значение:
C: \ Projects \ TestProject \ TestResults \ klaw_ [имя_компьютера здесь] [время здесь] \

вместо того, что я хочу, это C: \ Projects \ TestProject \

Я пробовал Assembly.GetExecutingAssembly (). CodeBase, а также с похожими результатами.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 27 марта 2009

Вам нужно пометить этот файл атрибутом DeploymentItemAttribute, если вы используете MSTest. Это означает, что он будет скопирован с DLL.

2 голосов
/ 27 марта 2009

Поскольку это тест, как насчет сделать файл встроенным ресурсом? Затем вы можете прочитать встроенный ресурс во время выполнения со следующим кодом:

Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);

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

AssemblyGetExecutingAssembly().GetManifestResourceNames();

Возвращает список встроенных ресурсов.

1 голос
/ 28 марта 2009

В дополнение к маркировке элемента с помощью [DeploymentItem] вам также необходимо убедиться, что в конфигурации тестового прогона включена опция Развертывание развертывания, а также каталог, из которого можно получить элементы.

1 голос
/ 27 марта 2009

Ну, это говорит правду. В отличие от NUnit / TestDriven.NET и т. Д. - MSTest копировал вещи в разные папки для каждого теста. Что (IMO) является проблемой - например, вам необходимо либо указать атрибуты файлов для включения ([DeploymentItem]), либо указать их в testrunconfig (свойства -> Развертывание -> Добавить файл ...) .

Сравните это с TestDriven.NET, где вы можете использовать флаг "Copy to Output Directory".

...