2017-02-09 94 views
0

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

[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); 
    } 

然而,当我跑我得到一个错误: invalid verify on a non-virtual member

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

private Mock<IModel> _moqModel;

有什么想法?

+0

你尝试... _moqModel.As ().Verify(X => x.BasicPublish(It.IsAny (),It.IsAny (),It.IsAny (),urlBytes ),Times.Once); –

+1

请检查BasicPublish是接口成员还是扩展方法。将BasicPublish作为扩展方法而不是实际成员可能导致此异常 –

+0

提供可用于重现问题的[mcve]。本例中没有足够的上下文,因为目前显示的内容不应该导致该错误。 – Nkosi

回答

0

BasicPublish签名:

public void BasicPublish(string exchange, string routingKey, bool mandatory, IBasicProperties basicProperties, byte[] body) 

Moq的和其他类似的嘲弄框架只能模拟接口,抽象方法/属性(上抽象类)或在具体类的虚拟方法/属性。

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