最小起订量设置方法 return 值

Moq setting method return value

我有以下 class,我正在尝试测试方法 AddRecordToQueue。

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

AddToQueue 方法returns 一个布尔值,所以我试图用真值模拟结果

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;
    }
}

我的测试 class 如下所示。

[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 更改为 return 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)

您需要使用调用它的实际参数来设置该方法。 如果 JsonConvert.SerializeObject(data) return 为空,则设置为:

rabbitConection.Setup(e => e.AddToQueue(null, "someExchange")).Returns(true)

此外,您可以将方法设置为 return true/false 而不管参数的值:

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

通过上述设置,无论您向该方法传递什么内容,该方法都将 return true。仅当使用设置的参数调用方法时,上一个示例才会 return 为真。

  1. 正如其他人所说,设置不正确。
  2. 您需要在 之前调用 Setup 使用关联的 Object

它应该类似于:

...
rabbitConection
    .Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>()))
    .Returns(true);
var draftContactsManager = new Test(rabbitConection.Object);
...