2016-04-28 72 views
1

我不確定真正的單元測試是否應該與外部系統(如數據庫)嚴格交互,但我的做法 - 想法是我的設置代碼確保數據庫處於特定狀態,然後我的單元測試期望得到調用方法的某些結果;我需要檢查DB訪問代碼是否正確。在多個單元測試類之間共享數據庫設置數據

我想在多個測試類中使用相同的數據庫測試數據,而不是複製粘貼到每個類'[TestInitialize],我想知道如何做到這一點。選擇似乎包括:

  1. 放棄一切在外部的.sql腳本,並用靜態方法

我寧願代碼來更新數據庫運行此

  • 某種輔助類的是我的C#代碼的一部分,但是想知道MSTest項目可以處理這種更典型的方式嗎?

  • +0

    引用外部系統是一個壞主意。我更願意在數據訪問層和業務層之間創建一個圖層。例如具有數據訪問方法和屬性的接口。這可以進行測試。 –

    +0

    我想我一般都同意,但這是如何設置的。把它稱爲另一種類型的測試,如果這讓你更快樂:)集成? –

    +0

    Db是否需要爲每個測試重置,還是按照所有測試使用。 – Nkosi

    回答

    2

    您可以使用繼承來在多個單元測試類之間共享設置數據。

    您可以創建一個基礎測試類,並讓其他類繼承它(包括將針對每個測試調用的[TestInitialize])。

    看看這篇文章,Structuring Unit Tests,展示瞭如何使用測試結構具有對所有測試

    使用上面的鏈接,以供參考測試結構可能看起來像普通的設置代碼測試...

    [TestClass] 
    public partial class DbTests { 
        protected DbContext db;  
    
        [TestInitialize] 
        public virtual void Init() { 
         //Virtual so it could be overridden in derived classes if needed. 
         //...check the DB-access code is doing the right thing. 
        } 
    
        [TestClass] 
        public class Test1 : DbTests { 
         [TestMethod] 
         public void Should_Do_Some_Test(){...} 
    
         [TestMethod] 
         public void Should_Do_Some_Db_Test(){...} 
        } 
    
        [TestClass] 
        public class Test2 : DbTests { 
         [TestMethod] 
         public void Should_Do_Some_Other_Test(){...} 
        }  
    } 
    

    我使用上面的格式來構建我的共享通用設置代碼的測試。