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
接口上不存在。