2009-10-07 46 views
0

我對單元測試很熟悉,但我仍然在學習模擬和嘲笑框架。我得到的想法(我認爲),但語法仍然有點外國。我正在考慮創建一些自動生成接口和類的模擬實現的T4模板。使用泛型和擴展方法的組合,這將讓我做這樣的事情:使用T4爲接口的代碼生成模擬對象是一個好主意嗎?

var service = new MockCustomerService(); //code-generated and implements ICustomerService, has a method named 'Insert' 
var target = new CustomerController(service); 
var item = new Customer(); 
target.Insert(item); 
service.InsertMethod.Assert.WasLastCalledWith(item); 

或:

var service = new MockCustomerService(); //code-generated and implements ICustomerService, has a method named 'GetById' 
var target = new CustomerController(service); 
var item = new Customer(); 
target.GetByIdMethod.ShouldReturn(item); 
var actual = target.Edit(1); 
service.GetByIdMethod.Assert.WasLastCalledWith(1); 
Assert.AreEqual(actual.ViewData.Model, item); 

首先,這是甚至真的「嘲笑」,還是我失去了一些基本的東西。其次,這看起來似乎是一種合理的方法,或者是否有理由使用框架而無需手動創建類似的類?第三,那裏有沒有其他類似的東西?我環顧四周,並沒有發現太多...

回答

0

首先,這是真的「嘲笑」, 或我缺少一些基本的東西。

告訴你的第二個例子,有是發生在這條線嘲弄:

target.GetByIdMethod.ShouldReturn(item); 

這使您可以爲target.GetByIdMethoditem),返回一個假值,而不實際調用target.GetByIdMethod

其次,這個問題似乎像它會 是一個聲音的方法,還是有 理由使用的框架超越 不必手動創建類似 類?

我們之所以使用模擬框架,是因爲我們希望返回某些方法的假值,以便我們可以輕鬆地控制我們想要測試的內容。另外,通過使用模擬框架,我們還可以聲明調用了正確的方法,和/或使用正確的參數。

三,還有什麼其他的 那裏有類似嗎?

你是什麼意思?你是否說有類似的東西有嘲諷的框架?或者那裏有任何單元測試代碼模板生成引擎?有很多mocking frameworks out there。至於是否有單元測試代碼模板生成引擎,那麼我不確定。

+0

感謝您的回答。清楚的是,我正在談論代碼生成實際的具體模擬對象,而不是生成單元測試。換句話說,我認爲T4生成MockCustomerService可能比使用RhinoMocks,Moq等在運行時生成它更好。 – Daniel

相關問題