c# - 使用 Moq 检查传递回 mock 的对象的属性

标签 c# unit-testing moq

是否可以检查发送到 Mocked 方法的对象的属性?例如我有:

public class Foo
{
    int SomeNumber {get; set;}
}

public class ReceivesFoo: IReceivable
{
    public void Process(Foo foo)
    {
    }
}

public class Bar
{
    private IReceivable receiver;

    public void SomeMethod(int b)
    {
        Foo foo = new Foo();
        if (b == 0)
        {
            foo.SomeNumber = 12;
        }
        else
        {
            foo.SomeNumber = 7;
        }
        receiver.Process(foo);
    }
}

public class TestBar
{
    public void ZeroReceives12()
    {
        mockReceivable.Setup(x => x.Process(It.IsAny<Foo>());
        bar.SomeMethod(0);
    }
}

这是一个相当简化的过程,但希望您知道我的意思。我知道在一个方法中创建一个新类是个坏主意。所以这是在工厂的其他地方完成的。但是设置新对象的各种属性的所有逻辑都是在这个方法中完成的。因为把那个逻辑放在工厂里是没有意义的,因为它与工厂无关,事情会根据 Bar 的状态而改变。

所以基本上我只想能够做的不仅仅是验证模拟接收者会收到某种 Foo。我想确保它收到了 Foo 的一个实例并且它的 SomeNumber 被设置为 12。

最佳答案

这对您来说是一个很好的引用... https://github.com/Moq/moq4/wiki/Quickstart

基本上你想要这样的东西......

public void ZeroReceives12()
{
    int input;

    mockReceivable.Setup(x => x.Process(It.IsAny<Foo>())
              .Callback(y => foo = y);

    bar.SomeMethod(0);

    // ensure input is what you expect
}

关于c# - 使用 Moq 检查传递回 mock 的对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651843/

相关文章:

c# - 如何处理paypal电子支票

asp.net-mvc-3 - 使用 Moq 如何验证函数是否在不指定参数的情况下被调用?

entity-framework - 删除Collection的步骤已修改;枚举操作可能无法执行。错误?

c# - 如何从已运行的 WPF 系统托盘应用程序启动窗口?

c# - 正确使用 IDisposable 接口(interface)

c# - 设置单元测试以使用 Unity 测试 Controller

c# - 单元测试依赖方法

c# - 使用 Moq 的单元测试工作单元和通用存储库模式框架

c# - 在 C# 中格式化电话号码的最快方法?

c# - 删除测试后的 MSTest 空目录