2010-06-03 83 views
3

我在我的項目中編寫了一些單元測試,並且在包含我想測試的方法的控制器上有一個datacontext依賴項。嘲笑具有依賴性的對象的數據上下文

我正在使用Ninject注入依賴項和Moq來創建我的模擬datacontext。我的DI使用了一個接口IDataContext,這是我的dbml使用並通過注入過程使用的接口。

在我的單元測試,我創造我的模擬的DataContext如下:

var mock = new Mock<IDataContext>(); 
var myController = new MyController(mock.Object); 

這將引發第二線Object reference not set to an instance of an object.例外,而執行datacontexts構造。

我明顯錯過了設置這個的一個基本部分,但大多數我見過的Moq例子涉及使用Setup()對嘲笑對象進行某種測試。

我對此有何看法?我應該創建一個模擬我的IDataContext界面或其他東西嗎?

+0

您可以顯示異常的調用堆棧? – 2010-06-03 17:23:55

+0

另外,MyController的構造函數中發生了什麼? 如果我不得不冒險猜測在這一點上,你錯過了模擬對象的設置,應該返回構造函數中使用的東西。 – cloggins 2010-06-03 19:12:59

+0

感謝您的評論傢伙。我正準備在melaos發佈我正在尋找的答案之前回復。再次感謝您抽出時間發表評論。 – 2010-06-04 12:48:51

回答

2

哈哈,當我通過emad's blog on unit testing in ASP.Net MVC.

我猜,你沒有連接字符串添加到您的測試項目右邊的app.config閱讀 答案來了? :)

這就是數據庫依賴的方式,因爲你還沒有嘲笑數據庫端。 所以,如果你想這樣做,你需要谷歌了一些代碼,有幾種方法可以做到這一點。

我發現下面這幾個引用是非常有用的,但由於我真的沒有必要模擬數據庫端,我現在只是使用我的測試數據庫服務器。

link

+0

感謝melaos!添加一個app.config到我的測試項目,並把我的連接字符串代碼放在那裏工作。優秀! – 2010-06-04 12:27:05

+0

很高興幫助:) – melaos 2010-06-05 01:08:48