最小起订量设置方法 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 为真。
- 正如其他人所说,设置不正确。
- 您需要在 之前调用
Setup
使用关联的 Object
它应该类似于:
...
rabbitConection
.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>()))
.Returns(true);
var draftContactsManager = new Test(rabbitConection.Object);
...
我有以下 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 为真。
- 正如其他人所说,设置不正确。
- 您需要在 之前调用
Setup
使用关联的Object
它应该类似于:
...
rabbitConection
.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>()))
.Returns(true);
var draftContactsManager = new Test(rabbitConection.Object);
...