Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最小起订量设置方法返回值_C#_Unit Testing_Moq - Fatal编程技术网

C# 最小起订量设置方法返回值

C# 最小起订量设置方法返回值,c#,unit-testing,moq,C#,Unit Testing,Moq,我有下面的类,我正在尝试测试AddRecordToQueue方法 我使用Moq在AddRecordToQueue方法中模拟AddToQueue方法的结果 AddToQueue方法返回一个布尔值,因此我尝试用一个真值模拟结果 public class Test { private readonly IRabbitMqConnection rabbitMqConnection; public Test(IRabbitMqConnection rabbitMqConnection)

我有下面的类,我正在尝试测试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;
    }
}
我的测试课如下所示

[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);
    }
}
[TestClass]
公共类测试控制
{
[测试方法]
公开测试()
{
Moq.Mock兔子连接=新的Moq.Mock();
var draftContactsManager=新测试(rabbitconconnection.Object);
Setup(e=>e.AddToQueue(null,string.Empty)).Returns((bool res)=>true);
var result=draftContactsManager.AddRecordToQueue(“someExchange”,null);
断言(结果);
}
}
我似乎无法将最低起订量结果设为真。有人能告诉我遗漏了什么吗


谢谢

我认为您需要将
返回值
更改为仅返回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)
rabbitconconnect.Setup(e=>e.AddToQueue(It.IsAny(),It.IsAny())。返回(true)

您需要使用调用的实际参数设置该方法。 如果
JsonConvert.SerializeObject(data)
返回null,则这是设置:

rabbitConection.Setup(e => e.AddToQueue(null, "someExchange")).Returns(true)
此外,您可以将该方法设置为返回true/false,而不考虑参数的值:

rabbitConection.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>())).Returns(true)
rabbitconconnect.Setup(e=>e.AddToQueue(It.IsAny(),It.IsAny())。返回(true)
通过上述设置,无论您向方法传递了什么,该方法都将返回
true
。上一个示例仅在使用设置的参数调用该方法时才会返回true

  • 正如其他人所说,设置是不正确的
  • 在使用关联的
    对象之前,需要调用
    设置
  • 它应该类似于:

    ...
    rabbitConection
        .Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>()))
        .Returns(true);
    var draftContactsManager = new Test(rabbitConection.Object);
    ...
    
    。。。
    兔肉连接
    .Setup(e=>e.AddToQueue(It.IsAny(),It.IsAny())
    .返回(真);
    var draftContactsManager=新测试(rabbitconconnection.Object);
    ...
    
    不是在机器上进行测试,但我在这里看到了两件事。1.在获得对
    .Object
    的引用之前,应该
    设置
    ;2.在
    Setup
    中,将参数设置为null,并为空,尝试使用
    Setup(e=>e.AddToQueue(It.IsAny(),Is.IsAny())。返回(true))
    实际上,在获取ObjectNice之前不必进行设置。谢谢兄弟。确保在你的设置中你正在使用它。所有参数都是我的,而不是你安排的一些测试变量。啊,我误解了参数的用途。这很好地解决了问题。谢谢你的解释。我刚刚开始学习使用moqt进行单元测试。这不是真的。.Setup参数只是不匹配,但是之前可以使用对.Object的引用(例如在夹具设置中)。如果这个答案完全错误,为什么这个答案有+1票?