RhinoMocks:IList <t> Stub在被存根后不会将项添加到列表中</t>

时间:2009-07-10 15:54:28

标签: c# rhino-mocks

我的内容如下所示:

var someList = MockRepository.GenerateStub<IList<ISomething>>();
someList.Add(MockRepository.GenerateStub<ISomething>());

列表正确地创建为代理。但是,每当我尝试将项目添加到列表时,它都不会将项目添加到列表中。

我有一种感觉,这是因为代理类没有添加的实现,但我想知道如何在不执行此操作的情况下解决这种情况:

var someList = new List<ISomething>();
someList.Add(MockRepository.GenerateStub<ISomething>());

为什么我要这样做?假设我有自己特殊的列表,比如MySpecialList,这是一个IList,但是在我的单元测试中,我不想经历即时消息的麻烦,我宁愿只是将它添加为添加行为。

3 个答案:

答案 0 :(得分:2)

如果您确实希望列表表现为列表,那么为什么还要将其删除?它只是你追求的存根列表吗?在这种情况下,实例化一个具体列表并向其添加一个存根的ISomething。

答案 1 :(得分:2)

你可能真的不需要添加这些物品吗? 难道你不能只是设置对Add()的调用次数的预期,然后让Count()返回预期的值吗?

基本上你是在嘲笑一个List,我认为这意味着你正在测试一个依赖于行为而不是列表实现的类。

Expect.Call(() => someList.Add(1));
Expect.Call(() => someList.Add(2));
Expect.Call(() => someList.Add(3));
Expect.Call(someList.Count()).Returns(3);

methodBeingTested.Call(someList);

mocks.VerifyAll();

测试'methodBeingTested'添加三个值,然后在它添加项目的列表上调用Count()。

答案 2 :(得分:0)

我相信GenerateStub方法不会像你期望的那样为你提供一个“智能”存根,只是一个模拟对象,它具有正常工作的属性,并且在不期望调用时不会抛出异常。这里没有魔法。

我像你一样使用标准集合,假设它们完美实现:)