c# - 模拟 Action<T> 以根据参数返回值

标签 c# unit-testing moq

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

我想做的事情可行吗?

最佳答案

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

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

关于c# - 模拟 Action<T> 以根据参数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293069/

相关文章:

unit-testing - 如何在 VS Code 中调试 dotnet 测试?

c# - AutoFixture/AutoMoq 忽略注入(inject)实例/卡住模拟

visual-studio-2010 - VS 2010 中的 MS 单元测试,测试方法 [我的方法] 抛出异常 : . ..,WT*?

c# - 使用 Moq 对 LINQ to SQL CRUD 操作进行单元测试

c# - 使用最小起订量的非虚拟成员的无效设置

c# - x86 和 x64 上的双重格式不同

c# - 忽略 KeyBinding 中的重复(按住键 - 只执行一次命令)

C# 数组不适用于 for 循环

c# - HashSet 不删除对象

unit-testing - 如何为 SAPUI5/OPENUI5 应用程序设置测试用例?