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# 模拟rabbitMQ IModel验证错误_C#_Unit Testing_Rabbitmq - Fatal编程技术网

C# 模拟rabbitMQ IModel验证错误

C# 模拟rabbitMQ IModel验证错误,c#,unit-testing,rabbitmq,C#,Unit Testing,Rabbitmq,我有一个简单的单元测试,需要验证我的方法是否调用IModel.BasicPublish方法。所以我写了一个简单的单元测试: [TestMethod] public void RequestAdded() { const string url = "http://localhost"; var urlBytes = Encoding.UTF8.GetBytes(url); _proxyService.AddRequest(url);

我有一个简单的单元测试,需要验证我的方法是否调用
IModel.BasicPublish
方法。所以我写了一个简单的单元测试:

[TestMethod]
    public void RequestAdded()
    {
        const string url = "http://localhost";
        var urlBytes = Encoding.UTF8.GetBytes(url);

        _proxyService.AddRequest(url);

        _moqModel.Verify(x => x.BasicPublish(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<IBasicProperties>(), urlBytes), Times.Once);
    }
[TestMethod]
已添加公共void RequestAdded()
{
常量字符串url=”http://localhost";
var urlBytes=Encoding.UTF8.GetBytes(url);
_proxyService.AddRequest(url);
_验证(x=>x.BasicPublish(It.IsAny(),It.IsAny(),It.IsAny(),urlBytes),次.Once);
}
但是,当我运行时,我得到一个错误:
对非虚拟成员的验证无效

我认为这只能发生在具体类上,而不是在接口上

private Mock\u moqModel


有什么想法吗?

基本公共签名:

public void BasicPublish(string exchange, string routingKey, bool mandatory, IBasicProperties basicProperties, byte[] body)
Moq和其他类似的模拟框架只能模拟接口、抽象方法/属性(在抽象类上)或虚拟方法/属性(在具体类上)


这是因为它会生成一个代理,该代理将实现接口或创建一个派生类,该派生类会覆盖那些可重写的方法以拦截调用。

您是否尝试过_moqModel.As().Verify(x=>x.BasicPublish(It.IsAny(),It.IsAny(),It.IsAny(),urlBytes),次.Once);请检查BasicPublish是接口成员还是扩展方法。如果将BasicPublish作为扩展方法而不是实际成员,则可能会导致此异常提供,该异常提供可用于重现问题。本例中的上下文不够,因为当前显示的内容不应导致该错误。应将其标记为正确答案。原来,
RabbitMQ.Client
有一系列扩展方法,比如
BasicPublish(这个IModel模型、字符串交换、字符串路由键、IBasicProperties basicProperties、byte[/code>体)
IModel
接口上不存在。