如何在 Rhino Mocks 中模拟 ReadOnlyCollection

本文关键字:ReadOnlyCollection 模拟 Rhino Mocks | 更新日期: 2023-09-27 18:33:11

我在单元测试中使用了 rhino mock,我正在尝试使用以下代码创建一个模拟:

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() 方法的 moq,但我不知道这在犀牛模拟中的等价物是什么。(类确实有一个无参数构造函数)如何为只读集合创建存根/模拟?

如何在 Rhino Mocks 中模拟 ReadOnlyCollection<T>

您可以将任何构造函数参数传递给GenerateMock

var inner = new List<UserDetails>();
var userDetails = MockRepository.GenerateMock<ReadOnlyCollection<UserDetails>>(inner);

您可能需要考虑在测试中创建ReadOnlyCollection实例,并从其他方法调用返回它,这比模拟适当的方法要简单得多。

不确定你能用 Rhino Mock 做到这一点。问题是 ReadOnlyCollection 不是一个接口,也不包含开源模拟框架可以使用的虚拟方法。

由于ReadOnlyCollection实现了IList因此您可以尝试此SO问题中建议的方法

如何使用最小起订量模拟私有只读 IList 属性

基本上将 IList 集合用作公共属性,但将基础列表设为私有,以便您仍然可以获得只读体验。因此,在测试中,您可以使用:

var userDetails = MockRepository.GenerateMock<IList<UserDetails>>();

如果你真的想模拟一个ReadOnlyCollection,你需要购买TypeMock或JustMock。或者,获取Visual Studio 2012 Premium with Update 2,您可以在其中使用MS Fakes模拟框架。

编辑:李的回答比我的:)效率高得多我会建议那个。

相关文章:
  • 没有找到相关文章