2012-06-08 51 views
1

我無法讓我的驗證工作在數據庫調用中。要驗證模擬,是需要驗證的返回

我有一個方法,我只是試圖驗證一個數據庫調用。

我不能發佈真實的代碼,但這裏是一個很好的例子。

protected void ReportDB(uint waitTimeInMinutes) 
    { 
     //check database connection 
     Status dbStatus = Status.Ok; 
     string dbComment = "ok"; 
     try 
     { 
      Data.GetActive("1"); 
     } 
     catch (Exception ex) 
     { 
      dbComment = "Unable to access the database: " + ex.Message; 
      dbStatus = Status.Critical; 
     } 

     //Report Status. 
    } 

所以基本上,GetActive()方法只是進行數據庫調用。如果它不拋出異常,那麼我們就很好,並且連接已經結束。

我的測試方法是。

[TestMethod] 
    public void ReportDBStatusTest() 
    { 
     _fakeData.Setup(s => s.Data.GetActive(It.IsAny<string>())); 

     _unitUnderTest = new Service(); 
     _unitUnderTest.ReportDB(0); 

     _fakeData.Verify(s => s.Data.GetActive(It.IsAny<string>()), Times.Once()); 
    } 

我通過調試和方法被調用,一切,但驗證說,它被稱爲Times.Never。我想我可能會誤解如何正確地做到這一點。

錯誤:

上模擬一旦預期調用,但在0倍性:s => s.Data.GetActive(It.IsAny()) 配置設置和調用:

回答

5

的錯誤是預期。這是因爲'ReportDB'對象內的'Data'對象與'_fakeData'對象內的'Data'對象不同。

一種解決方法是將'ReportDB'對象中的'Data'對象外化,以便它可以被模擬。否則,你需要改變你的單元測試。

+0

謝謝,我知道這是愚蠢的。 – Adam