Moq конвертирует It.IsAny <Exception>в It.IsAny <string>в ожидании - PullRequest
0 голосов
/ 03 августа 2009

Я использую Moq для модульных тестов, и я настроил ожидание так:

myMock.Expect(w => w.MyMethod(It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<System.Exception>(), null))
      .Returns(myResult);

метод насмешки:

logger.WriteLogItem(string1, string2, string3, System.Exception, IEnumerableInstantiation);

Эта сборка и работает нормально, однако VerifyAll () не проходит, и я получаю ошибку:

Moq.MockVerificationException : The following expectations were not met:
IMyClass l => l.MyMethod(It.IsAny<string>(), It.IsAny<string>(), 
                         It.IsAny<string>(), It.IsAny<String>(), null)

По какой-то причине он заменяет Исключение на строку ....

Кто-нибудь видел это раньше / есть идеи, почему он это делает и что я могу сделать, чтобы это исправить / обойти это?

спасибо!

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

Ах, это была ошибка новичка! А конверсия была просто красной селедкой, предназначенной для того, чтобы отправлять меня в интернет в поисках сумасшедших ответов, которых там нет.

Я не передавал объект myMock.Object вызывающей команде!

0 голосов
/ 05 августа 2009

Хорошо, я создал тестовый метод, у которого в качестве параметра было исключение, и вызвал его, используя moq описанным выше способом, и он работал нормально. Так что, по-видимому, нет проблемы с передачей исключения как параметра как такового.

Я также изменил первый параметр со значения перечисления на перечисление It.IsAny. Так с

myMock.Expect(w =>
    w.MyMethod(**MyEnum.Value**,
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<System.Exception>(),
        null))
.Returns(myResult);

до

myMock.Expect(w =>
    w.MyMethod(**It.IsAny<MyEnum>()**,        
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<System.Exception>(),
        null))
.Returns(myResult);

и результат, который я получил, был:

IMyClass l =>
    l.MyMethod(IsAny<MyEnum>(),
        IsAny<MyEnum>(), 
        IsAny<MyEnum>(),
        IsAny<MyEnum>(),
        null)

Похоже, что он берет тип первого параметра и по какой-то причине применяет его ко всем остальным .....

...