С# 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, и установите его "Копировать в каталог вывода" на "Копировать всегда".