Ошибка при использовании Moq.Times с оператором?: - PullRequest
2 голосов
/ 20 апреля 2020

Я пытаюсь протестировать свой код, используя инфраструктуру Moq, и я хотел бы проверить, вызваны ли мои методы или нет в некоторых особых случаях. Для этого я должен использовать Mock.Times. Если я использую Times, как это, он работает правильно.

MockObject.Verify(x => x.SomeMethod(), Times.Once)

Но так как у меня есть много способов проверки, я хочу использовать его следующим образом:

System.Func<Times> times = isItCalled ? Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times)

И для этого я получаю следующее сообщение об ошибке: Невозможно определить тип условного выражения, поскольку не существует неявного преобразования между «группой методов» и «группой методов».

Это действительно странно для меня, потому что я подумал этот оператор аналогичен следующему (который также работает правильно):

 System.Func<Times> times;
 if (isItCalled)
 {
    times = Times.Once;
 }
 else
 {
    times = Times.Never;
 }
 MockObject.Verify(x => x.SomeMethod(), times)

1 Ответ

2 голосов
/ 20 апреля 2020

Это известная проблема с троичным оператором.

Возможное решение:

Func<Times> times = isItCalled ? (Func<Times>)Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times);

Или:

// note the parentheses so you pass a Time instance instead of a delegate:
MockObject.Verify(x => x.SomeMethod(), isItCalled ? Times.Once() : Times.Never());
...