С# DeploymentItem не может скопировать файл для MSTest unit test

У меня возникли проблемы с копированием XSL файла в тот же каталог, что и тестовая сборка, когда я использую атрибут DeploymentItem на MSTest unit test. Я выполнил выбранный ответ этот вопрос, и файл, который мне нужно скопировать, имеет свой "Копировать в выходной каталог", который установлен в "Копировать всегда". Когда я проверяю свой каталог ProjectDir\bin (каталог Target), файл, который я хочу скопировать, действительно существует вместе с DLL и PDB.

У меня есть несколько модульных тестов со следующей настройкой:

private const string DLL = "Service.dll";
private const string XSL_PATH = "transform.xsl";

[TestInitialize]
public void InitializeTest()
{
    Assert.IsTrue(File.Exists(DLL)); // passes
}

[TestMethod]
[DeploymentItem(DLL)]
[DeploymentItem(XSL_PATH)]
public void XmlToResultsTest()
{
    Assert.IsTrue(File.Exists(XSL_PATH)); // fails
}

Тест XSL терпит неудачу, потому что, когда я проверяю каталог MSTest TestResults\specificTestRun\Out, я вижу библиотеки DLL и PDB, но моего XSL файла там нет. Я хочу знать, почему XSL файл не копируется вместе с библиотеками DLL и PDB, даже когда я прямо говорю Visual Studio, чтобы скопировать его там через DeploymentItem?

Ответ 1

Благодаря Marc Gravell ответьте на мой собственный вопрос, я попробовал обновить свой файл MSTest.testrunconfig, чтобы мой XSL файл был включен в раздел "Развертывание", Это позволяет передавать мои модульные тесты, но я все еще обеспокоен тем, что мне пришлось это сделать - не следует ли сочетать DeploymentItem и маркировать свойства файла в моем проекте для копирования в выходной каталог?

Ответ 2

Предположительно, элементы развертывания VS2008 молча проваливаются, если выходной каталог не является литеральной строкой. Хммм ^ _ ^

Ответ 3

У меня была такая же проблема, хотя я был, используя литеральную строку в элементе развертывания. Я даже попытался добавить файл в раздел "Развертывание" параметров теста, которые тоже не работали. Оказалось, что проблема связана с тестовой платформой.

У меня 64-битная машина, и оба проекта, которые я тестировал, и целевой платформой проекта unit test были "Любой процессор".

Я обнаружил, что элемент развертывания был только скопирован, если я выбрал "Запуск тестов в 64-разрядном процессе на 64-битной машине".

Ответ 4

У нас была аналогичная ситуация на работе, где атрибут DeploymentItem работал не так, как ожидалось. Мы также использовали 64-битные машины с платформой проекта, установленной в "Любой процессор". В качестве обходного пути мы включили файл, требуемый unit test в качестве ссылки из проекта unit test, и установите его "Копировать в каталог вывода" на "Копировать всегда".