我的内容如下所示:
var someList = MockRepository.GenerateStub<IList<ISomething>>();
someList.Add(MockRepository.GenerateStub<ISomething>());
列表正确地创建为代理。但是,每当我尝试将项目添加到列表时,它都不会将项目添加到列表中。
我有一种感觉,这是因为代理类没有添加的实现,但我想知道如何在不执行此操作的情况下解决这种情况:
var someList = new List<ISomething>();
someList.Add(MockRepository.GenerateStub<ISomething>());
为什么我要这样做?假设我有自己特殊的列表,比如MySpecialList,这是一个IList,但是在我的单元测试中,我不想经历即时消息的麻烦,我宁愿只是将它添加为添加行为。
答案 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方法不会像你期望的那样为你提供一个“智能”存根,只是一个模拟对象,它具有正常工作的属性,并且在不期望调用时不会抛出异常。这里没有魔法。
我像你一样使用标准集合,假设它们完美实现:)