模拟行动<t>基于参数返回值</t>

时间:2014-08-13 18:00:37

标签: c# unit-testing moq

这有点难以描述,但我需要模拟/存根方法以根据输入返回T的实例。

邮件签名如下:

T DoSomething<T>(Action<T> action);

以下是SUT中的代码:

var myEvent = _service.DoSomething<IMyEvent>(y =>
{
    y.Property1 = localProperty1;
    y.Property2 = localProperty2;
});

以下是我的单元测试中的设置:

service.Setup(x => x.DoSomething<IMyEvent>
         (It.IsAny<Action<IMyEvent>>())).Returns((
         (Action<IMyEvent> x) =>
         {
             return new MyEventFake //derives from IMyEvent
             {
                 Property1 = x.Property1,
                 Property2 = x.Property2
             };
         }));

这不会编译,因为x是一个Action。

我正在尝试做什么?

1 个答案:

答案 0 :(得分:2)

鉴于您的代码示例,您似乎可以创建一个新的MyEventFake,将其传递给该操作,然后再将其返回:

service.Setup(x => x.DoSomething<IMyEvent>
         (It.IsAny<Action<IMyEvent>>())).Returns((
         (Action<IMyEvent> x) =>
         {
              IMyEvent myEvent = new MyEventFake();
              x(myEvent);
              return myEvent;
         }));