【发布时间】:2013-01-09 18:10:16
【问题描述】:
在我的界面中
public IMyListInterface : IList<IMyItem>
{
void Foo();
}
如何轻松创建一个示例来测试使用 IMyListInterface 的类。
目前我正在使用 GenerateStub<MyListInterface>() 并将所需的方法/属性委托给 List<IMyItem> 列表,但这很乏味。
目前正在测试以下代码工作
foreach (var match in matchList)
我在我的测试课中做以下事情
IList<IMyItem> baseList = new List<IMyItem>();
IMyListInterface matchList = MockRepository.GenerateStub<IMyListInterface>();
matchList.Stub(m => m.GetEnumerator()).Return(null).WhenCalled(i => i.ReturnValue = baseList.GetEnumerator());
有没有更好的办法?
【问题讨论】:
-
为什么不直接使用 Rhino.Mocks 内置的“Stub”方法——即 myListStub.Stub(f => f.Foo()) ?您能否展示一些您当前如何使用 Rhino.Mocks 的代码?
-
Foo 的存根工作正常,但模拟列表行为很乏味,因为我必须存根 Add、RemoveAt、Count 等。我想知道是否有办法让 Rhino Mocks 让我知道它直接使用列表。
-
让我们退后一步。为什么要模拟列表?通常(并非总是),模拟用于存根整个依赖项。您是否希望删除列表的某些行为——但保持其余功能相同?更多信息会有所帮助。
-
我不想模拟列表。但是我想测试的项目表现出列表行为。理想情况下,我只想有一个列表(例如 new List
()),但看不到如何获得它。我的类中有一个名为 MatchList 的变量,正在测试 IMyListInterface 类型,我需要从该变量中获取列表行为。我尝试将 List 强制转换为 IMyListInterface 但这引发了异常。 -
你为什么还要存根 IMyListInterface 实现?如果它只有列表行为(添加/删除),只需使用具体的实现 - 无需将其存根(据我所知 - 您仍然没有提供代码来显示您正在尝试的内容测试)。
标签: list rhino-mocks stub