lev*_*bra 20 c# unit-testing moq
我有以下类,我正在尝试测试方法AddRecordToQueue.
我正在使用Moq来模拟AddRecordToQueue方法中AddToQueue方法的结果.
AddToQueue方法返回一个布尔值,所以我试图用真值模拟结果
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试类如下所示.
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法将moq结果设置为true.任何人都可以建议我缺少什么
谢谢
Tom*_*ode 21
我认为您需要更改Returns为仅返回true而不是lambda.像这样:
rabbitConection.Setup(e => e.AddToQueue(null, string.Empty)).Returns(true)
Run Code Online (Sandbox Code Playgroud)
编辑:
如果这仍然不起作用,那可能是由于参数不匹配.您正在传入"someExchange"但是mock已设置为string.Empty.如果您不确定将使用哪些值,您可以使用该It.IsAny方法来解决此问题.
rabbitConection.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>())).Returns(true)
Run Code Online (Sandbox Code Playgroud)
您需要使用调用的实际参数来设置该方法。如果JsonConvert.SerializeObject(data)返回 null,则这是设置:
rabbitConection.Setup(e => e.AddToQueue(null, "someExchange")).Returns(true)
Run Code Online (Sandbox Code Playgroud)
此外,您可以将方法设置为无论参数值如何都返回 true/false:
rabbitConection.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>())).Returns(true)
Run Code Online (Sandbox Code Playgroud)
通过上述设置,true无论您传递给该方法的内容是什么,该方法都会返回。仅当使用设置的参数调用方法时,前面的示例才会返回 true。
| 归档时间: |
|
| 查看次数: |
26574 次 |
| 最近记录: |