2010-05-25 126 views
2

我想爲我的n層web應用程序創建一堆MS visual studio單元測試,但由於某種原因,我無法運行這些測試測試和我碰到下面的錯誤 -ASP.NET項目的單元測試問題(運行測試時出現NullReferenceException)

我想要做的就是我用我的數據訪問層的測試

「不設置到對象的實例 對象引用」 LINQ數據上下文類來執行某個函數並返回結果,但是在調試過程中,我發現所有的測試都儘快失敗因爲他們到達LINQ數據上下文類,它與連接字符串有關,但我無法弄清楚是什麼問題。

測試調試這裏失敗(第二行):

public EICDataClassesDataContext() : 
    base(global::System.Configuration.ConfigurationManager.ConnectionStrings["EICDatabaseConnectionString"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 

而且我的測試如下:

TestMethod()] 
    public void OnGetCustomerIDTest() 
    { 
     FrontLineStaffDataAccess target = new FrontLineStaffDataAccess(); // TODO: Initialize to an appropriate value 
     string regNo = "jonh"; // TODO: Initialize to an appropriate value 
     int expected = 10; // TODO: Initialize to an appropriate value 
     int actual; 
     actual = target.OnGetCustomerID(regNo); 
     Assert.AreEqual(expected, actual); 
    } 

這是我從DAL調用的方法是:

public int OnGetCustomerID(string regNo) 
    { 
     using (LINQDataAccess.EICDataClassesDataContext dataContext = new LINQDataAccess.EICDataClassesDataContext()) 
     { 
      IEnumerable<LINQDataAccess.GetCustomerIDResult> sProcCustomerIDResult = dataContext.GetCustomerID(regNo); 
      int customerID = sProcCustomerIDResult.First().CustomerID; 

      return customerID; 
     } 
    } 

所以基本上所有的東西在到達DA層方法的第一行之後都失敗了,當它試圖實例化t他LINQ數據訪問類...

我花了大約10個小時試圖解決問題,但沒有結果......我真的很感激任何幫助!

UPDATE: 最後,我已經解決了這個問題!!!! :)我不知道爲什麼,但在App.config一些原因文件到我的數據庫連接後如下:

AttachDbFilename = | DataDirectory | \ EICDatabase.MDF

所以我所做的只是改變了路徑,而不是| DataDirectory |我把在我的MDF文件位於實際的路徑,即

C:\用戶\ 1 \文檔\ Visual Studio 2008的\項目\ EICWebSystem \ EICWebSystem \ App_Data文件\ EICDatabase.mdf

後,我但仍然有點不清楚是什麼問題......可能是數據庫的不正確路徑?ASP.NET項目的web.config包含| DataDirectory | \ EICDatabase.MDF路徑,儘管..

+0

嘿亞歷克斯,看看這個http://stackoverflow.com/questions/236412 /連接字符串 - 地獄在網絡LINQ - SQL - ASP - NET 希望它可以幫助你。 – Malcolm 2010-05-25 15:07:05

+0

我試圖創建測試項目目錄下的app_config文件,然後我只是將web.config文件的'Connectionstrings'部分複製到此app.config文件中,並在運行測試後得到了一個不同的異常:「System.Data.SqlClient.SqlException:試圖爲文件C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ EICDatabase.mdf附加自動命名的數據庫失敗。具有相同名稱的數據庫存在,或指定的文件無法打開,或者它位於UNC共享上。「我做錯了嗎?還是另外一個新問題? – Alex 2010-05-25 15:23:12

回答

0

對我來說,好像你的問題是連接字符串,它沒有設置。 我假設你的單元測試與DAL不在同一個項目中。 您在沒有連接字符串的情況下在datacontext構造函數上調用'new'命令。所以它通常應該使用它的默認設置。但是由於這個設置通常存儲在其他項目的web.config中,因此沒有設置連接字符串並且出現錯誤。

如果它的權利,我想,你必須從DAL項目設置到單元測試項目。最簡單的解決方案應該是將web.config連接字符串複製到單元測試項目的app.config。

確實還有其他可能性,但我認爲將web.config配置放入單元測試項目並不容易。

2

LINQDataAccess.EICDataClassesDataContext尋找web.config或一些其他外部數據源的設置?

我可以告訴你一個事實,你必須跳過這個環節才能讓你的測試代碼獲得web.config

更新 啊,是的。我看到您在測試失敗的線路上使用ConfigurationManager ... ConfigurationManager尋找web.config進行配置。當我編寫測試時,這一直是我的一個難點。

您需要更改代碼,以便該類可以在沒有web.config的情況下實例化,或者您需要使其可以訪問web.config。

+0

看看這個討論的問題的一個可能的解決方案:http://stackoverflow.com/questions/2503105/vsts-load-test-datasource-issues/2503406#2503406 – 2010-05-25 14:58:01

+0

感謝您的解釋,現在我終於明白什麼是這個問題,但是你能告訴我,讓我的測試能夠訪問web.config的方式是什麼?我的意思是我只需要以某種方式建立一個我需要的連接來運行測試,但我不知道如何使它.. – Alex 2010-05-25 15:01:25

+0

@Alex,請按照前面評論中引用的討論中給出的說明進行操作。 – 2010-05-25 15:53:42

2

您的測試項目是否有自己的配置文件?這種行爲通常意味着應用程序無法找到連接字符串。測試項目需要自己的文件,因爲它們不在客戶端應用程序的上下文中運行。

UPDATE添加app.config後描述的錯誤在測試構建於SQLExpress上的Web應用程序並附加.mdf時很常見。 SQLExpress不能一次在多個進程中運行。因此,如果您以前運行過您的Web應用程序,它可能仍然處於活動狀態,並會與嘗試附加數據庫相沖突。

您可以使用SQL Management Studio來永久附加數據庫,然後使用更傳統的連接字符串,如:

Server=myServer;Database=EICDatabase;Trusted_Connection=True; 
相關問題