我有下面的类,我正在尝试测试 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/