如何将期望中的参数传递给Rhino Mocks中的返回值?

时间:2013-08-08 14:12:44

标签: c# rhino-mocks

我想模仿这个界面:

interface IA {
  IB DoSomething(IC arg)
}

以模拟这样的实现的方式:

class A : IA {
    public IB DoSomething(IC arg) { return new B(arg); }
}

我该怎么做? 从其他类似的问题来看,它应该是这样的:

MockRepository.GenerateMock<IA>().Expect(x => x.DoSomething(null)).IgnoreArguments().Callback<IC>(arg => new B(arg))

但我无法让它发挥作用。我正在使用RhinoMocks 3.6

2 个答案:

答案 0 :(得分:1)

var mock = MockRepository.GenerateMock<IA>();
mock
  .Stub(x => x.DoSomething(Arg<IC>.Is.Anything)
  // return a new instance of B each time
  .WhenCalled(call => call.ReturnValue = new B((IC)call.Arguments[0]))
  // make rhino mock validation happy
  .Return(null);

答案 1 :(得分:1)

这是一个类型安全的例子:

var mockA = MockRepository.GenerateMock<IA>();
mockA
    .Stub(x => x.DoSomething(Arg<IC>.Is.Anything))
    .Do((Func<IC, IB>)(arg => new B(arg)))
    .Return(null);