[英]How to mock ReadOnlyCollection<T> in Rhino Mocks?
我在單元測試中使用了Rhino模擬,並且嘗試使用以下代碼創建模擬:
var userDetails = MockRepository.GenerateMock<ReadOnlyCollection<UserDetails>>();
但是,當我運行單元測試時,出現以下錯誤:
Can not instantiate proxy of class:
System.Collections.ObjectModel.ReadOnlyCollection`
1[[SolutionName.FolderName,]].
Could not find a parameterless constructor.
我在網上搜索並找到了類似的問題和解決方案,其中一個問題是使用SetupGet()方法進行的,但我不知道在犀牛模擬中這相當於什么。 (UserDetails類確實具有無參數的構造函數)如何為ReadOnlyCollection創建存根/模擬?
您可以將任何構造函數參數傳遞給GenerateMock
:
var inner = new List<UserDetails>();
var userDetails = MockRepository.GenerateMock<ReadOnlyCollection<UserDetails>>(inner);
您可能要考慮在測試中創建ReadOnlyCollection
的實例,並從其他方法調用中返回它,這比模擬適當的方法要簡單得多。
不確定您可以使用Rhino Mock做到這一點。 問題在於ReadOnlyCollection不是接口,也不包含開放源代碼模擬框架可以使用的虛擬方法。
由於ReadOnlyCollection
實現了IList
您可以嘗試在此SO問題中找到的建議方法
基本上將IList集合用作公共屬性,但是將基礎列表設為私有,因此您仍會獲得只讀體驗。 因此,在測試中,您可以使用:
var userDetails = MockRepository.GenerateMock<IList<UserDetails>>();
如果您真的想模擬ReadOnlyCollection,則需要購買TypeMock或JustMock。 或者,獲取帶有Update 2的Visual Studio 2012 Premium,您可以在其中使用MS Fakes模擬框架。
編輯:李的答案比我的有效得多:)我建議改用一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.