2010-09-15 2 views
2

У меня есть несколько тестовых классов и методов, копировать определенный каталог, как так:DeploymentItem сбой копирования каталогов при наличии нескольких проектов тестов на решение

[TestClass, DeploymentItem("LanguageData", "LanguageData")] 
public class OcrTests 
{ 
    [TestMethod] 
    public void Can_Capture_Field() 
    { 
     // some code that expects the LanguageData directory to be in the test results Out directory 
    } 

    // etc 
} 

[TestClass] 
public class OcrBuilderTests 
{ 
    [TestMethod, DeploymentItem("LanguageData", "LanguageData")] 
    public void Can_Build_Specific_Ocr_Engine_Implementation() 
    { 
     // some more code that expects the LanguageData directory to be in the test results Out directory 
    } 

    // etc 
} 

этих проверок в одном узле и все файлы в каталоге LangaugeData установлены их Copy to Output Directory, установленные на Copy Always.

Все работает отлично, и каталог скопирован в файл результатов Out, если у меня есть только одна тестовая сборка, загружаемая в решение, или это единственная сборка, в которой я запускаю тесты (т. Е. Запускать тесты только в текущем контексте /класс).

Как только я добавляю вторую сборку и выполняю все тесты в решении, тогда этот каталог больше не копируется, , но любые другие элементы DeploymentItems, которые являются отдельными файлами, похоже, скопированы в порядке.

Тесты все еще выполняются, но те, которые зависят от этого каталога, разбиваются. Предположительно, это потому, что MSTest не может найти каталог - возможно, он ожидает, что он будет в каталоге сборки одной из других тестовых сборок?

Любые идеи о том, что такое несколько тестовых проектов, которые препятствуют копированию, и что я могу сделать, чтобы обойти его, не добавляя каждый отдельный файл в этот каталог в качестве отдельного DeploymentItem?

ответ

1

Этот вопрос довольно старый, но он все равно может принести пользу другим. Тем более что I оказался здесь :)

Похоже, что DeploymentItemAttribute не поддерживает использование одного и того же имени пути источника в нескольких тестовых классах. Примечание: Я сказал то же имя пути, а не физическую папку (подумайте, что разные тестовые проекты с тем же именем папки для развертывания).

Однако имя папки назначения может быть различным, без каких-либо негативных последствий.

Мое предложение:

  1. Создать арматуру базового класса (если вы предпочитаете, в отдельном проекте)
  2. Добавить атрибут: [TestClass, DeploymentItem("LanguageData", "LanguageData")]
  3. Измените OcrTests и OcrBuilderTests классов наследовать новый класс ,
  4. Не забудьте удалить deploymentitem атрибуты «LanguageData» от OcrTests и OcrBuilderTests

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

К сожалению, DeploymentItemAttribute заполнен Gotchas, см. here для получения дополнительной информации.

0

Пробовал свой подход, но все же не копировать папку должным образом, так что я сделал вместо этого скопированных файлов не каталоги (возможно, это поможет кому-то):

[TestClass] 
[DeploymentItem("connectionStrings.config")] 

// should be able to do this, but it does not work always, only sometimes 
//[DeploymentItem("Configs", "Configs")] 

// this instead should work always 
[DeploymentItem("Configs\\file1.txt", "Configs")] 
[DeploymentItem("Configs\\file2.txt", "Configs")] 
[DeploymentItem("Configs\\file3.txt", "Configs")] 
..... 
[DeploymentItem("Configs\\filen.txt", "Configs")] 
public class BaseTests 
{ 
} 
+0

Из моего опыта это не на самом деле добавить другие файлы , Кажется, он просто добавляет первый. – Fatlad

Смежные вопросы