2009-07-10 62 views
0

我有东西,看起来像以下后不添加项目到列表中。但是,每当我尝试将项目添加到列表中时,它都不会将项目添加到列表中。RhinoMocks:</p> <pre><code>var someList = MockRepository.GenerateStub<IList<ISomething>>(); someList.Add(MockRepository.GenerateStub<ISomething>()); </code></pre> <p>列表被作为代理创建正确:IList的<T>存根它已经被掐灭

我有一种感觉,这是因为代理类没有实现添加的,但我不知道我会如何纠正这种情况,而不只是在做这个:

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

我为什么要这么做这个?比方说,我有我自己的特殊列表,比如MySpecialList,这是一个IList,但在我的单元测试中,我不想通过即时操作的麻烦,我宁愿将它存根添加行为。

回答

2

如果你真的想要列表的行为作为一个列表,为什么你扼杀它呢?这只是你之后存根的列表吗?在这种情况下,实例化一个具体的列表并添加一个存根的ISomething。

+0

在我的实际测试中我没有碰伤它,我只是创建一个列表对象,因为我有我的问题的底部,但我有我创建自己的列表的情况下,我想知道在这种情况下,将如何处理。我会编辑我的问题来澄清。 – Joseph 2009-07-10 16:09:49

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()。

0

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

我用的是标准的集合像你一样,那种假设它们是完全实现:)

相关问题