2010-05-06 123 views
7

我正在使用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」,並且已將其複製到輸出目錄=「複製,如果是新的」。

當試圖運行這個簡單的單元測試,我收到以下錯誤:

The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: ERROR [42S02] [Microsoft][ODBC Excel Driver] The Microsoft Office Access database engine could not find the object 'Sheet1'. Make sure the object exists and that you spell its name and the path name correctly.

我驗證過表名稱拼寫是否正確(即工作表Sheet1)和我覈實,我的數據源設置正確。

網頁搜索一點也沒有發現。我完全被難住了。

所有的幫助或輸入是讚賞!!!!

+0

工作表名稱應附加'$',否則它肯定會失敗(對於Visual Studio 2015仍然有效),例如: 「Sheet1 $」 – DeChrist 2017-03-23 15:38:18

回答

11

將Excel(.xlsx)的「Build Action」屬性更改爲Content並將「Copy to Output Directory」更改爲新的複製。

這爲我工作,當我得到了相同的錯誤URS ...

++也不要忘記瀏覽和TestRun.config文件,它是在服務器soution的部署選項卡中添加Excel文件。 。:)

+0

「在TestRun.config的Deployment選項卡中添加excel文件[Local.testsettings ]在服務器soution中的文件「幫助我解決了同樣的問題。 +1並且謝謝你! – regex 2011-01-04 20:08:53

2

我有一個類似的問題,但只是試圖部署一個簡單的XML文件。

問題原來是我正在部署的文件的文件名太長。

1

我在這裏有兩個問題,一個是我的excel文件中所需表單的拼寫錯誤。另一個,我認爲重要的是.xls.xlsx文件之間的區別。在我的機器我有Office 2007的所以自動的Excel文件的擴展名是.xlsx,但我應該寫一個測試案例已經已經實施了一個項目,它就是用這個數據源:

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

我在2007年之前有Office版本的計算機上創建了一個excel文件,所以擴展名爲.xls,然後我將這個excel文件移到了我的機器上。這樣我就可以解決我的問題。

3

您應該確保您的部署在您選擇的測試設置中啓用了!

祝你好運!

0

的解決方案,我在本地設置 2)部署部分試圖 1)增加了數據文件更改了文件的屬性爲「內容」和「複製,如果新」 3)硬編碼的文件的位置在部署項目屬性中以及在app.config文件中的連接字符串中。

以上都不奏效。

最終我發現註冊表沒有Jet dll寄存器。我從沒有收到錯誤的機器的註冊表中導出Jet文件夾(HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Jet),並將它導入到機器中,我收到錯誤消息。這爲我解決了這個問題。

0

工作表名稱應附加'$',否則它肯定會失敗(對於Visual Studio 2015仍然有效),例如: "Sheet1$"