«Короткое замыкание» пустых методов с 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 itSaveItem()
Я хочу провести модульное тестирование таким образом, чтобы мы настроили необходимый контекст и обеспечили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();