嘲笑Action< T>根据参数返回值

本文关键字:参数 返回值 Action 嘲笑 | 更新日期: 2023-09-27 18:17:47

这有点难以描述,但是我需要模拟/存根一个方法来根据输入返回一个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。

我想做的是可能的吗?

嘲笑Action< T>根据参数返回值

给定您的代码示例,似乎您可以创建一个新的MyEventFake,将其传递给动作,然后返回它:

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