2

我有许多复制特定目录的测试类和方法,如下所示:

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

4

2 回答 2

2

这个问题已经很老了,但仍然可以使其他人受益。特别是因为最终来到这里:)

似乎DeploymentItemAttribute不支持在多个测试类中使用相同的源路径名。注意:我说的是相同的路径名,而不是物理文件夹(考虑使用相同文件夹名部署的不同测试项目)。

但是,目标文件夹名称可以不同,不会产生不良影响。

我的建议是:

  1. 创建一个夹具基类(如果您愿意,可以在单独的项目中)
  2. 添加属性:[TestClass, DeploymentItem("LanguageData", "LanguageData")]
  3. 更改您的OcrTestsOcrBuilderTests类以继承新类。
  4. 请记住从 OcrTests 和 OcrBuilderTests 中删除“LanguageData”的部署项属性

我已经尝试过了,非常成功。就我而言,我有一个通用的测试夹具项目和多个测试项目,每个项目都使用基类。

不幸的是,DeploymentItemAttribute 充满了陷阱,请参阅此处了解更多信息。

于 2011-07-27T10:45:56.367 回答
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
{
}
于 2012-07-25T09:08:38.097 回答