将大型项目从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。
答案 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]
更改
DataSource
参数只是文件名(不是相对路径),DeploymentItem argument
是相对于包含测试的项目文件夹的路径。此外(本论坛的其他地方也有记载)
BuildAction=none
(或默认空白),Copy To Output Directory=Copy Always
。并且您必须在解决方案中配置一个TestSettings配置,并在上选中<{1}} 。
所有这一切以及旧的VS2008数据驱动测试都将神奇地开始寻找他们的数据文件。