2

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

错误是:

结果消息:单元测试适配器未能连接到数据源或读取数据。有关解决此错误的详细信息,请参阅 MSDN 库中的“数据驱动单元测试故障排除”( http://go.microsoft.com/fwlink/?LinkId=62412 )。错误详细信息: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。

4

1 回答 1

3

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

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的路径。

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

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

并且您必须在解决方案中有一个 TestSettings 配置并Deployment选中

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

于 2015-10-08T10:02:11.247 回答