2017-02-09 125 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的和其他類似的嘲弄框架只能模擬接口,抽象方法/屬性(上抽象類)或在具體類的虛擬方法/屬性。

這是因爲它會生成一個代理來實現接口或創建派生類來覆蓋這些可覆蓋的方法以攔截調用。