«Короткое замыкание» пустых методов с Moq?

Недавно моя команда приняла решение использовать Moq в качестве основы для насмешек, поскольку она обладает невероятной гибкостью и хорошо читаемым синтаксисом. Поскольку мы новички в этом, я спотыкаюсь о том, что кажется простыми вопросами - поиски (здесь, Google и т. Д.) Находят множество дискуссий о других нюансах Moq, но не обязательно, что я после, и несколько, казалось бы, связанных вопросов превратились в красную сельдь.

Мы тестируем класс, который имеет внешнюю зависимость (точнее, Amazon SimpleDb), но не хотим, чтобы наши тесты были связаны с наличием действующего соединения. Конкретный метод:

Applies some "business" logic If appropriate, invokes a call out to SDB via a provider we've built, let's call it SaveItem()

Я хочу провести модульное тестирование таким образом, чтобы мы настроили необходимый контекст и обеспечилиSaveItem() был вызван, но таким образом, чтоSaveItem() на самом деле не вызывается (потому что A) поставщик SDB - это макет, который не полностью гидратирован и, вероятно, будет бомбить, а B) я не хочу платить за эту транзакцию сотни и тысячи раз).

При работе с методами, возвращающими значение, это было тривиально.

mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");

Хотя в случае, который я изложил выше, мой & quot;SaveItem()& Quot; Метод недействителен и, следовательно, возможность использовать MoqReturns() метод недоступен. И пока я могу настроить обратный вызов для проверкиSaveItem() вызывается, но я не могу, кажется, заставить его на самом деле ничего не делать.

Наивный / обнадеживающий, я думал, что следующее сработает, но похоже, что метод все еще вызывается:

mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));

Итак, вопрос на миллион долларов: что такое Moq следующего вымышленного кода?

mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();

Ответы на вопрос(1)

Ваш ответ на вопрос