【问题标题】:Unit Testing Error - The unit test adapter failed to connect to the data source or to read the data单元测试错误 - 单元测试适配器未能连接到数据源或读取数据
【发布时间】:2010-05-06 17:19:00
【问题描述】:

我正在使用 VSTS 2K8,并且我已经建立了一个单元测试项目。在其中,我有一个带有执行简单断言的方法的测试类。我使用 Excel 2007 电子表格作为我的数据源。

我的测试方法如下:

        [DataSource("System.Data.Odbc", 
        "Dsn=Excel Files;dbq=|DataDirectory|\\MyTestData.xlsx;defaultdir=C:\\TestData;driverid=1046;maxbuffersize=2048;pagetimeout=5", 
        "Sheet1", 
        DataAccessMethod.Sequential)]
    [DeploymentItem("MyTestData.xlsx")]
    [TestMethod()]
    public void State_Value_Is_Set()
    {
        string expected = "MD";
        string actual = TestContext.DataRow["State"] as string;
        Assert.AreEqual(expected, actual);
    }

如方法装饰属性中所示,我的 Excel 电子表格位于本地 C:/ 驱动器上。其中,我所有数据所在的工作表名为“Sheet1”。

我已将 Excel 电子表格复制到我的项目中,并将其 Build Action = "Content" 设置为 Copy to Output Directory = "Copy if Newer"。

在尝试运行这个简单的单元测试时,我收到以下错误:

单元测试适配器连接数据源或读取数据失败。有关解决此错误的详细信息,请参阅 MSDN 库中的“数据驱动单元测试故障排除”(http://go.microsoft.com/fwlink/?LinkId=62412)。 错误详细信息:错误 [42S02] [Microsoft][ODBC Excel 驱动程序] Microsoft Office Access 数据库引擎找不到对象“Sheet1”。确保对象存在并且正确拼写其名称和路径名。

我已验证工作表名称拼写正确(即 Sheet1),并且我已验证我的数据源设置正确。

网络搜索根本没有出现太多。我完全被难住了。

感谢所有帮助或输入!!!!

【问题讨论】:

  • 工作表名称应该附加一个“$”,否则肯定会失败(对于 Visual Studio 2015 仍然有效),例如:“Sheet1$”

标签: c# unit-testing


【解决方案1】:

将 Excel(.xlsx) 的“构建操作”属性更改为内容,如果更新,将“复制到输出目录”更改为复制。

当我遇到与 urs 相同的错误时,这对我有用...

++ 也不要忘记浏览并在服务器解决方案中 TestRun.config 文件的 Deployment 选项卡中添加 excel 文件..:)

【讨论】:

  • “在服务器解决方案中的 TestRun.config [Local.testsettings] 文件的部署选项卡中添加 excel 文件”帮助我解决了同样的问题。 +1,谢谢!
【解决方案2】:

您应该确保在您选择的测试设置中启用了您的部署!!!

祝你好运!!!

【讨论】:

    【解决方案3】:

    我遇到了类似的问题,但只是尝试部署一个简单的 XML 文件。

    问题原来是我正在部署的文件的文件名太长。

    【讨论】:

      【解决方案4】:

      我在这里遇到了两个问题,一个是我的 excel 文件中所需工作表的拼写错误。另一个我认为重要的是.xls.xlsx 文件之间的区别。在我的机器上,我有 Office 2007,所以 excel 文件的扩展名自动为 .xlsx,但我应该为已经实施的项目编写一个测试用例,并且它正在使用这个 DataSource :

      [DataSource("System.Data.Odbc",
                  @"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=Test.xls;DefaultDir=.",
                  "Data$", DataAccessMethod.Sequential)]
      

      我在具有 2007 年之前的 Office 版本的机器上创建了一个 excel 文件,因此扩展名是 .xls,然后我将此 excel 文件移到了我的机器上。这样我就可以解决我的问题了。

      【讨论】:

        【解决方案5】:

        我尝试过的解决方案 1) 在本地设置的部署部分添加数据文件 2)将文件的属性更改为“内容”和“如果较新则复制” 3) 在部署项属性和app.config文件的连接字符串中硬编码文件的位置。

        以上都不起作用。

        最终我发现注册表没有 Jet dll 寄存器。我从没有收到错误的机器的注册表中导出了 Jet 文件夹(HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet),然后将其导入到出现错误的机器上。这为我解决了这个问题。

        【讨论】:

          【解决方案6】:

          工作表名称应该附加一个“$”,否则肯定会失败(对于 Visual Studio 2015 仍然有效),例如: "Sheet1$".

          【讨论】:

            猜你喜欢
            • 2019-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-19
            • 2010-09-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多