我試圖寫ServiceStack服務簡單的單元測試,我會通過他們在網上已經測試和幾個線程在這裏。這是我想要完成的大部分細節的主線 - Unit Test HTTPRequest Headers with ServiceStack。單元測試
不過,我對着注射的IDbConnection對象到服務的問題。在webmethod中,使用OrmLite的GetDictionary方法填充字典對象。但我無法嘲笑它,因爲GetDictionary是擴展方法。
private Mock<IDbConnection> _dbConnectionMock;
private Dictionary<string, string> _nameValuePairs;
[SetUp]
public void SetUp()
{
_dbConnectionMock = new Mock<IDbConnection>();
_nameValuePairs = new Dictionary<string, string>()
{
{"name","test"},
{"Updatedby", "5/23/12 7:00:15 AM"},
{"Address", "212 Adam St."}
};
}
在測試方法
var service = new CustomerLookupService(_dbConnectionMock.Object);
var response = (HttpResult)service.Any(new CustomerLookup { name = "test" });
//assert statements
如果GetDictionary方法不能嘲笑,我甚至願意叫擊中DB Web方法,這個我需要創建APPHOST。
它的工作原理就像一個魅力。我有一個疑問,如果我們有多個讀取操作來檢索方法中的字典,如何模擬測試中的字典。我們是否需要按照相同的順序提及模擬對象。 – Sunny 2013-04-03 04:22:15
如果您正在測試將執行許多數據庫操作且每個操作返回相同Type的方法,則此解決方案可能不是最好的。也許可以用犀牛製品基於「調用順序」上實現返回不同的充值 - http://stackoverflow.com/questions/5609589/ordering-method-return-values-with-rhino-mock-stubs – paaschpa 2013-04-03 04:33:06
感謝回覆。你知道多個數據庫操作的任何替代想法嗎?實際上,我喜歡這種方法,我不需要通過違反DRY原則來創建單個存儲庫。 – Sunny 2013-04-03 04:56:56