Простой Мок? - Проблема с .Verify - PullRequest
0 голосов
/ 27 апреля 2010

просто простой вопрос здесь. Некоторое время я использовал Moq, но пока что использовал его только для окурков, а не для насмешек. Я пытаюсь познакомить наших разработчиков с модульным тестированием. Я создал простой пример, чтобы объяснить концепции, но я не могу заставить его работать. Наверное, что-то простое, поэтому я подумал, что просто попрошу всех вас посмотреть, что я делаю не так:

    <Test()> _
Public Sub Divide_DivideByZero_LogsError()
    Dim mock = New Mock(Of ILogger)
    With mock
        Dim calc = New MyCalculator(New CalculatorData, .Object)
        calc.Divide(55, 0)
        .Verify(Function(x) CType(x,ILogger).WriteError(it.IsAny(of String),It.IsAny(Of String))))
    End With
End Sub

Я использую Moq версии 3.2.416.3. Я получаю сообщение об ошибке .verify, в котором говорится, что я звоню с неверными аргументами. Я просто пытаюсь проверить, что .WriteError был вызван. любая помощь будет оценена.

Edit: Хорошо, все, если я изменю ".WriteError" с подпрограммы (возврат void) на функцию, которая возвращает логическое значение, это работает. WriteError не обязательно должен быть функцией. Кто-нибудь знает, почему саб не работает?

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Редактировать: Ок, все, если я изменю «.WriteError» с подпрограммы (возврат void) на функцию, которая возвращает логическое значение, которое работает.WriteError не обязательно должен быть функцией.Кто-нибудь знает, почему саб не сработает?

Насколько я помню, VB9 не поддерживает анонимные сабвуферы (только функции), и это серьезный ограничитель для использования Moq в VB.сеть.Итак, как только вы изменили подпись WriteError с Sub на Function, компилятор успешно разрешил тип возврата для анонимной функции в параметре Verify.

0 голосов
/ 27 апреля 2010

Я думаю, вам нужно сделать это Verifiable() перед тем, как звонить Verify(). Я не уверен, что он может выполнять автоматическую проверку.

И ИМХО, я считаю, использовать VerifyAll() гораздо проще, чем проверять отдельные методы. i.e.:

mock.Setup(Function(x) CType(x, ILogger).WriteError(It.IsAny(Of String), It.IsAny(Of String))) _
    .Verifiable()
mock.Object.WriteError("test", "Test")
mock.VerifyAll()

Не уверен, правильно ли я понимаю все имена методов / подписи, но вы должны понять это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...