0

我有一個包含Core項目頂部的Services項目的MVC項目的解決方案。MVC中的單元測試無法創建/訪問數據庫

我剛剛添加了一個單元測試項目和引用的核心和服務 - 我試圖測試服務。

我在測試中的基本呼叫:

public class CrudTests 
    { 
     private readonly SetServices _setService = new SetServices(); 

     [TestMethod] 
     public void TestMethod() 
     { 
      _setService.CreateSet("Test Set", "Test Set Details", null); 

這最終失敗,因爲測試不能連接到數據庫。我的配置具有這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=.\;Initial Catalog=Project.Services.Tests;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Project.Services.Tests.mdf" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

我已經通過創建數據庫Project.Services.Tests,然後運行試過,但我得到這樣的:

消息=數據庫「C:\ Program Files文件\ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ App.Services.Tests.mdf' 已存在。選擇不同的數據庫名稱。無法將 文件 'C:\ PROJECTS \ App \ App \ Services.Tests \ bin \ Debug \ Services.Tests.mdf' 作爲數據庫'App.Services.Tests'附加。 。 來源= .net SqlClient數據提供 錯誤碼= -2146232060 類= 16 LineNumber上= 65536 數= 1801 程序= 「」 服務器= \ 狀態= 2 堆棧跟蹤:

我試着刪除數據庫,讓測試做它的事情,我得到這個:

發生文件激活錯誤。物理文件名 '\ Project.Services.Tests.mdf'可能不正確。診斷並更正 其他錯誤,然後重試該操作。

我該如何正確工作?

+1

IMO單元測試手段在沒有數據庫交互的情況下,您可以使用假或模擬進行單元測試。如果你使用數據庫進行單元測試,那麼你的測試將會像烏龜一樣慢:D – 2013-02-21 04:33:18

+0

我明白了 - 我一次只想學習一件事。 – RobVious 2013-02-21 15:11:16

回答

1

在單元測試中,您必須測試沒有任何依賴性的代碼,例如數據庫或文件系統等。 單元測試意味着獨立測試代碼的那部分代碼。 如果你想通過集成到數據庫來測試你的代碼,你必須創建集成測試。 這意味着您應該在運行測試之前創建數據庫使用的初始化,並在完成測試之後拆除資源。

也許這個鏈接可以幫助您更瞭解difference between Unit Test and Integration Test

+0

我只是試圖在這裏一次學習一件事...單元測試數據庫似乎更簡單 - 一旦我明白了,我會嘲笑。 – RobVious 2013-02-21 15:10:34

+0

簡單性在測試中無關緊要!您必須爲每個porpuse進行正確的測試。但正如我所說的,您可以爲數據庫的runnig測試創建初始化和拆卸方法。 – amirhosseinab 2013-02-21 19:32:46

+0

我看到這個答案很多,我覺得它很刺激 - 不是因爲它的錯誤 - 而是因爲DAL是應用程序中的一個層,應該與實際的數據庫實現分離(因此可以單元測試)。我看到的一個建議是使用內存數據庫(例如LocalDB或MDF)嘲笑生產模式,但佔用的空間相對較小 - http://blogs.interknowlogy.com/2014/08/29/unit-testing-使用-的LocalDB / – 2014-10-23 22:24:10

0

你應該只是修復連接字符串,它應該工作,你是從附加數據庫文件| DataDirectory目錄|的測試項目,