我有一个具有依赖关系的类:
private readonly IWcfClient<ITestConnectionService> _connectionClient;
我想要发出这个电话:
_connectionClient.RemoteCall(client => client.Execute("test"));
目前无效:
_connectionService
.Stub(c => c.RemoteCall(rc => rc.Execute("test")))
.Return(true);
这在Rhino中是否可行?
答案 0 :(得分:3)
如果您对“test”参数的确切值不感兴趣,可以使用Arg<>
构造:
_connectionService.Stub(c => c.RemoteCall( Arg<Func<string, bool>>.Is.NotNull ))
.Return(true);
答案 1 :(得分:3)
使用接受func并测试它的自定义Do委托。您可以通过将其转换为表达式并解析表达式树来执行此操作,或者仅使用模拟输入运行委托并测试结果。
如果RemoteCall()中的lambda不包含x =&gt; x.Execute(“test”),则以下内容将抛出错误 - 您可以根据想法使其完全按照您的意愿执行操作。< / p>
public interface IExecute {
void Execute(string input)
}
_connectionService
.Stub(c => c.RemoteCall(null)).IgnoreArguments()
.Do(new Func<Action<IExecute>,bool>( func => {
var stub = MockRepository.GenerateStub<IExecute>();
func(stub);
stub.AssertWasCalled(x => x.Execute("test"));
return true;
}));;