DeploymentItem не может копировать каталоги, если на решение приходится несколько тестовых проектов - PullRequest
2 голосов
/ 15 сентября 2010

У меня есть несколько классов тестов и методов, которые копируют определенный каталог, например:

[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?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

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

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

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

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

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

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

К сожалению, атрибут DeploymentItemAttribute заполнен Gotchas, подробнее см. здесь .

0 голосов
/ 25 июля 2012

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

[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
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...