2015-04-12 71 views
0

我寫單元測試哪種方法使用數據庫來檢查存在的記錄,但是當我在應用程序上調試它返回true,但是當在單元測試時調試它返回false,我想我錯過了一些東西像從數據庫模擬創建data.i單元test.pls的新手幫我解決它。如何使用數據庫的方法單元測試

public void Test_Exist_Record_Db(TriangleModel triangle, bool regext) 
    { 
     //Arrange 
     bool isExist = false; 
     //Act   
      isExist = _repository.IsCalculatedBefore(triangle);   
     //Assert 
     Assert.AreEqual(isExist, regext); 
    } 

這種方法使用數據庫

public bool IsCalculatedBefore(TriangleModel triangle) 
    { 
     using (var db = new TriangleModelDataContext()) 
     { 
      var temp = 
       db.TriangleModels.FirstOrDefault(
        x => 
         x.LengthSideA ==triangle.LengthSideA && 
         x.LengthSideB == triangle.LengthSideB && 
         x.LengthSideC == triangle.LengthSideC); 
      if (temp != null) 
      { 
       return true; 
      } 
      return false; 
     } 
    } 
+0

引用我的最新評論:http://stackoverflow.com/questions/29550730/why-is-my-mock-set-empty#comment47253063_29550730 –

回答

1

稱爲針對實際資源的測試,如數據庫,被稱爲集成測試,而不是單元測試。在你的情況下,你不需要進行集成測試,因爲你使用的是由EF開發人員進行廣泛測試的實體框架。

爲了解決您的問題:我相信,您的連接字符串在開發環境中不同於測試環境中的連接字符串。 DbContext有一個像Connection這樣的屬性(我不知道確切的名稱,但是在IntelliSense中,或者在調試測試時檢查對象,您應該能夠找到它),您可以使用它來比較連接字符串。但我寧願mock the DbContext。你可以閱讀關於Wikipedia的嘲笑。

而且,如果您不知道它,而不是使用.FirstOrDefault()然後檢查null,則可以使用返回布爾值的.Any()方法,該方法告訴您是否存在滿足條件的條目。