单元测试错误 - 单元测试适配器无法连接到数据源或读取数据

时间:2010-05-06 17:19:00

标签: c# unit-testing

我正在使用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:/ Drive上。在其中,我所有数据所在的工作表名为“Sheet1”。

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

尝试运行此简单单元测试时,收到以下错误:

  

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

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

网络搜索根本没有发现。我完全难过了。

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

6 个答案:

答案 0 :(得分:12)

将Excel(.xlsx)的“Build Action”属性更改为Content,将“Copy to Output Directory”更改为Copy for new。

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

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

答案 1 :(得分:3)

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

祝你好运!!!

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

我在这里遇到两个问题,一个是我的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)]

我在具有 Office版本2007之前的的计算机中创建了一个excel文件,因此扩展名为.xls,然后我将此excel文件移动到我的计算机上。这样我就能解决我的问题。

答案 4 :(得分:0)

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

以上都没有奏效。

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

答案 5 :(得分:0)

工作表名称应该包含' $'否则它肯定会失败(仍然适用于Visual Studio 2015),如: "Sheet1$"