【问题标题】:How to fix broken data-driven unit test in Visual Studio 2013 after VS upgradeVS 升级后如何修复 Visual Studio 2013 中损坏的数据驱动单元测试
【发布时间】:2015-10-07 16:42:56
【问题描述】:

将一个大型项目从 VS2008 升级到 VS2013,由于找不到相关的数据文件,大量单元测试现在失败了。原始的 DataSource 属性是由 VS2008 提供的测试连接字符串向导创建的,但在 VS2013 Pro 中不再可用。数据文件肯定在那里,在解决方案中完全相同的位置,并且所有的属性都设置为 Copy Always。我怀疑 DataSource 属性所需的参数发生了微妙的变化,但 MSDN 文档在这方面提供的帮助很少。

错误是:

结果消息:单元测试适配器未能连接到数据 源或读取数据。有关故障排除的更多信息 此错误,请参阅“数据驱动单元测试故障排除” (http://go.microsoft.com/fwlink/?LinkId=62412) 在 MSDN 库中。 错误详细信息:Microsoft Jet 数据库引擎找不到 对象'MatrixSampleResultGrid_ExcludeHiddenResults.csv'。确保 对象存在并且您拼写它的名称和路径名 正确。

之前一直报这个错误是因为数据文件被移动或者重命名了,属性没有更新,但是这里肯定不是这样的。

这是一个典型的当前DataSource属性定义:

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\MatrixSampleResultGrid_ExcludeHiddenResults.csv", "MatrixSampleResultGrid_ExcludeHiddenResults#csv", DataAccessMethod.Sequential)]

在 VS 解决方案中(即在磁盘上),数据文件的实际路径是

[theProjectRootFolder]\TestData\MatrixSampleResultGrid_ExcludeHiddenResults.csv

测试结果发布到

[theProjectRootFolder]\TestResults\[testrun_datetimestamp]\In and ...\Out

虽然我注意到没有任何数据文件被复制到 In 或 Out 文件夹中。这很重要吗?

对于 VS2008,这些属性多年来每天都保持不变,所以我只能得出结论,对于 VS2013,数据不再合适,但发生了什么变化?没有那个向导,我什至无法重建属性,所以我很茫然。

另外,我不知道“|DataDirectory|”的位置表示在测试运行的上下文中。

有人可以帮忙吗? TIA。

【问题讨论】:

    标签: visual-studio data-driven


    【解决方案1】:

    我已经找到了为什么我们所有的 VS2008 数据驱动测试都无法在 VS2013 中找到它们的数据文件的解决方案。花了几个小时阅读我在 VS 中可以找到的关于单元测试和 TDD 的所有 MSDN 文档,完全没有照明(没用!),我在此处发布解决方案,以使其他处于类似情况的人免于痛苦:

    VS2013 测试框架似乎对在哪里查找数据文件有不同的规则(即与 VS2008 不同)。要么我们无意中在 VS2008 中使用了一个不再有效的“未记录功能”,要么 MS 只是更改了它。我不知道是哪个,但它已经改变了。

    但是,一旦您发现原因,解决方法就很简单了。假设数据文件在测试项目文件夹的子文件夹中(例如[projectfolder]\TestData),旧的VS2008测试属性:

    (例如) [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\MyDataFile.csv", " MyDataFile#csv", DataAccessMethod.Sequential)][DeploymentItem("Test Projects\\Project1Tests\\TestData\\MyDataFile.csv"), TestMethod()]

    需要修改为

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "MyDataFile.csv", "MyDataFile#csv", DataAccessMethod.Sequential), DeploymentItem("TestData\\MyDataFile.csv"), TestMethod]

    变化是

    1. 第二个DataSource 参数只是文件名(不是相对路径),而
    2. DeploymentItem argument 是一个相对于包含测试的项目文件夹的路径

    另外(这已在本论坛的其他地方记录)

    1. 数据文件属性必须设置为BuildAction=none(或默认的空白Copy To Output Directory=Copy Always

    并且您必须在解决方案中进行 TestSettings 配置,并选中 Deploymenton

    做所有这些,旧的 VS2008 数据驱动测试将神奇地开始寻找他们的数据文件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多