Использование методов When и Protected на одном и том же элементе настройки с Moq - PullRequest
1 голос
/ 27 февраля 2020

Есть ли способ использовать и Mock.Protected, и Mock.When вместе для настройки одного члена, , за исключением того, что условие When перемещено в обратный вызов настройки или вызывает обычный Setup в if block ?

Требуется, чтобы Moq сохранил любую существующую настройку без изменений, но все же поддерживал другую настройку при определенных условиях.

Я собираюсь сделать что-то вроде этого:

mock.When(x => condition).Protected().Setup<int>("member").Returns(0);

1 Ответ

1 голос
/ 27 февраля 2020

В настоящее время нет возможности использовать обе эти функции вместе.

Mock<T>.When определяется как

public ISetupConditionResult<T> When(Func<bool> condition)`  

Версия = 4.13.1.0

И ISetupConditionResult<T> не допускает Proteced<T> метод расширения

public static IProtectedMock<T> Protected<T>(this Mock<T> mock) where T : class;

, так как для него требуется Mock<T> в качестве цели.

Если возможно, используйте нормальное условие и затем выполните защищенную настройку

if(condition) {
    mock.Protected().Setup<int>("member").Returns(0);
}
...