c# - Moq设置方法返回值

标签 c# unit-testing moq

我有下面的类,我正在尝试测试 AddRecordToQueue 方法。

我正在使用 Moq 模拟 AddRecordToQueue 方法中 AddToQueue 方法的结果。

AddToQueue 方法返回一个 bool 值,所以我试图用真值模拟结果

public class Test
{
    private readonly IRabbitMqConnection rabbitMqConnection;

    public Test(IRabbitMqConnection rabbitMqConnection)
    {
        this.rabbitMqConnection = rabbitMqConnection;

    }

    public bool AddRecordToQueue(string messageExchange, object data)
    {
        var jsonified = JsonConvert.SerializeObject(data);
        var customerBuffer = Encoding.UTF8.GetBytes(jsonified);
        var result = this.rabbitMqConnection.AddToQueue(customerBuffer, messageExchange);
        return result;
    }
}

我的测试类如下所示。

[TestClass]
public class TestCon
{
    [TestMethod]
    public void MockTest()
    {
        Moq.Mock<IRabbitMqConnection> rabbitConection = new Moq.Mock<IRabbitMqConnection>();

        var draftContactsManager = new Test(rabbitConection.Object);

        rabbitConection.Setup(e => e.AddToQueue(null, string.Empty)).Returns((bool res) => true);

        var result = draftContactsManager.AddRecordToQueue("someExchange", null);

        Assert.IsTrue(result);
    }
}

我似乎无法将最小起订量结果设置为 true。谁能告诉我我缺少什么

谢谢

最佳答案

我认为您需要将 Returns 更改为只返回 true 而不是 lambda。像这样:

rabbitConection.Setup(e => e.AddToQueue(null, string.Empty)).Returns(true)

编辑:

如果这仍然不起作用,则可能是由于参数不匹配。您正在传递 "someExchange" 但模拟是为 string.Empty 设置的。如果您不确定将使用什么值,您可以使用 It.IsAny 方法来解决这个问题。

rabbitConection.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>())).Returns(true)

关于c# - Moq设置方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633184/

相关文章:

c# - 如何在只有 setter 的接口(interface)上模拟委托(delegate)的提升?

c# - 如何将位图像素复制到其他位图,在 C# 中保留 alpha 透明度?

c# - 使用 [DisallowNull] 与不可为空的引用类型

c# - 如何使用 CORS 启用自定义 header ?

c# - 通过 Xamarin.Android 连接到 Microsoft 的 Cognitive Speaker Recognition API

c# - 如何验证是否调用了两种方法中的一种?

ios - 如何在测试框架中测试 NSLog(默认 iOS)

c# - 当参数为 MultipartFormDataStreamProvider 时无法模拟接口(interface)方法

c# - 如何模拟返回的模拟对象的方法?

javascript - 在测试我的 AngularJS Controller 时,如何在 $http.get promise 中模拟结果?