2017-02-09 8 views
0

У меня есть простой модульный тест, который должен проверить, вызвал ли мой метод метод IModel.BasicPublish. Так что я написал простой блок-тест:Mock 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.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 и другие подобные структуры насмешливо могут только подражают интерфейсы, абстрактные методы/свойства (на абстрактных классов) или виртуальные методы/свойства на конкретных классов.

Это связано с тем, что он создает прокси-сервер, который реализует интерфейс или создает производный класс, который переопределяет эти переопределяемые методы для перехвата вызовов.

 Смежные вопросы

  • Нет связанных вопросов^_^