c# - Moq:如何获取传递给模拟服务方法的参数

标签 c# moq

想象一下这个类

public class Foo {

    private Handler _h;

    public Foo(Handler h)
    {
        _h = h;
    }

    public void Bar(int i)
    {
        _h.AsyncHandle(CalcOn(i));
    }

    private SomeResponse CalcOn(int i)
    {
        ...;
    }
}

在 Foo 测试中 Mo(q)cking Handler,我如何才能检查 Bar() 传递给 _h.AsyncHandle 的内容?

最佳答案

您可以使用 Mock.Callback 方法:

var mock = new Mock<Handler>();
SomeResponse result = null;
mock.Setup(h => h.AsyncHandle(It.IsAny<SomeResponse>()))
    .Callback<SomeResponse>(r => result = r);

// do your test
new Foo(mock.Object).Bar(22);
Assert.NotNull(result);

如果你只想检查传入参数的一些简单的东西,你也可以直接这样做:

mock.Setup(h => h.AsyncHandle(It.Is<SomeResponse>(response => response != null)));

关于c# - Moq:如何获取传递给模拟服务方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3269717/

相关文章:

c# - 你能通过内存位置而不是内容来比较字符串吗?

c# - 模拟 protected 方法

c# - 在 Access 中基于数据表行运行查询的快速/有效的方法?

c# - 递归文件夹创建

c# - 如何使用 MVVM 模式在 WPF 中将一个 "disable"设为一个按钮?

c# - 使用 AutoFac 和 AutoMock 模拟 CloudBlobClient

c# - 不可收集的程序集不能引用可收集的程序集

unit-testing - 我们真的需要隔离框架来创建 stub 吗?

moq - 我可以从 Moq 获得一系列好的结果和抛出的异常吗

c# - 为什么在表达式树中需要转换