Настройка moq и проверка того, что метод был вызван - программирование
Подтвердить что ты не робот

Настройка moq и проверка того, что метод был вызван

Использование Microsoft Test Framework и Moq Я пытаюсь проверить, был ли вызван метод log4net.

    [TestMethod()]
    public void Log_Info_When_Stuff_Is_Done()
    {
        SampleClass sampleObject = new SampleClass(); 

        Mock<log4net.ILog> logMockObject = new Mock<log4net.ILog>();

        sampleObject.Log = logMockObject.Object;

        sampleObject.DoStuffAndLogInfo();

        logMockObject.Verify(moqLog => moqLog.Info("do stuff got called"), Times.AtLeastOnce());

    }

Я получаю исключение в Verify call, говоря, что

Ожидаемый вызов на макет хотя бы один раз, но он никогда не был Выполнено: moqLog = > moqLog.Info( "do stuff got called" ) Нет настроек сконфигурировано. Выполнено никаких вызовов.

Что я делаю неправильно?

update проблема связана с getter для свойства SampleClas.Log. Я всегда возвращал LogManager.GetLogger(...);, даже когда свойство уже было настроено на ILogProxy. Я был под впечатлением, что свойство get accessor не будет вызвано, потому что я настроил прокси-сервер таким образом sampleObject.Log = logMockObject.Object;

4b9b3361

Ответ 1

Сейчас Moq проверяет, что DoStuffAndLogInfo вызывает Info с точной строкой "do stuff got called". Если он на самом деле вызывает Info с другим аргументом, и вам все равно, что такое фактический аргумент, используйте вместо этого следующее:

logMockObject.Verify(moqLog => moqLog.Info(It.IsAny<string>()), Times.AtLeastOnce()); 

Ответ 2

Тест правильно настроен.

Проверьте свой сут, чтобы узнать, действительно ли Log.Info вызывается внутри метода DoStuffAndLogInfo.