2010-05-17 58 views
1

我试图使用Rhino.Mocks的流畅嘲讽的风格,并具有以下代码调用“工厂”一个模拟的IDictionary对象的工作原理:犀牛制品 - 流利的嘲讽 - Expect.Call问题

With.Mocks(_Repository).Expecting(() => 
     { 
      Expect.Call(() => factories.ContainsKey(Arg<String>.Is.Anything)); 
      LastCall.Return(false); 

      Expect.Call(() => factories.Add(Arg<String>.Is.Anything, Arg<Object>.Is.Anything)); 
     }).Verify(() => 
     { 
      _Service = new ObjectRequestService(factories); 
      _Service.RegisterObjectFactory(Valid_Factory_Key, factory); 
     }); 

现在,我能够设置ContainsKey调用的返回值的唯一方法是在以下行上使用LastCall.Return(true)。我确定我在这里混合样式作为Expect.Call()有一个.Return(Expect.Action)方法,但我不知道我是如何正确使用它返回一个布尔值?

任何人都可以帮忙吗?希望这个问题很清楚 - 让我知道是否有人需要更多信息!

干杯, 本

回答

3

我相信下面的行会给你想你想:

​​
+0

喜雅, 感谢您的回复!是的,我可以稍微修改我的测试以删除lambda表达式,并且允许我指定布尔返回值! 我仍然很想知道如何使用.Return(Expect.Action)方法工作,尤其是因为我在整个测试中都使用了Lambda!它看起来像我应该能够指定一个返回值,并使用lambda,除非我完全误解了一些东西... – 2010-05-17 09:19:54

+0

嗨本,你应该只使用Expect.Call委托/ lambda当模拟函数返回void。将lamda表达式和.Return(Expect.Action)一起使用是没有意义的。 .Return(Expect.Action)的出现是因为lambda表达式的类型为Expect.Action,与使用我用于Expect.Call的语法时.Return(bool)出现的方式相同。 – 2010-05-17 09:43:01

+0

好的,这样做更有意义!感谢您的帮助Jakob。 – 2010-05-17 09:53:43