VS升级后如何在Visual Studio 2013中修复损坏的数据驱动单元测试

时间:2015-10-07 16:42:57

标签: visual-studio data-driven

将大型项目从VS2008升级到VS2013后,大量单元测试现在失败,因为无法找到关联的数据文件。原始DataSource属性是由VS2008提供的测试连接字符串向导创建的,但在VS2013 Pro中不再可用。数据文件肯定存在于解决方案中的完全相同位置,并且所有属性都设置为“始终复制”。我怀疑DataSource属性所需的参数已经巧妙地改变了,但MSDN文档在这方面提供的帮助很少。

错误是:

  

结果消息:单元测试适配器无法连接到数据   来源或阅读数据。有关故障排除的更多信息   此错误,请参阅"数据驱动单元测试和#34;   (http://go.microsoft.com/fwlink/?LinkId=62412)在MSDN Library中。   错误详细信息:Microsoft Jet数据库引擎找不到   object' 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。

1 个答案:

答案 0 :(得分:3)

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

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

然而,一旦你跌倒了原因,修复很简单。假设数据文件位于测试项目文件夹(ex [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是相对于包含测试的项目文件夹的路径
  3. 此外(本论坛的其他地方也有记载)

    1. 数据文件属性必须设置为BuildAction=none(或默认空白),Copy To Output Directory=Copy Always
    2. 并且您必须在解决方案中配置一个TestSettings配置,并在上选中<{1}}

      所有这一切以及旧的VS2008数据驱动测试都将神奇地开始寻找他们的数据文件。