Чтобы завершить это обсуждение, препроцессор c ++ завершен. Это семантическое свойство, независимо от того, является ли включение излишним. Следовательно, из теоремы Райса следует, что неразрешимо, является ли включение избыточным или нет. Там НЕ МОЖЕТ быть программа, которая (всегда правильно) определяет, является ли добавление излишним.
ОБНОВЛЕНИЕ: Начиная с версии 3 проверьте обновление вопроса выше или ответа Dann ниже.
Также, сделайте свою насмешку строгой, таким образом, она перестанет работать при вызове метода, для которого у Вас нет ожидания
new Mock<IMoq>(MockBehavior.Strict)
Или, если Вы хотите, чтобы Ваша насмешка была свободна, используйте.Throws (Исключение)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
Это не работает в последних версиях Moq (по крайней мере начиная с 3,1), он должен быть указан в
Verify
метод, как упомянуто в ответе.
На самом деле, лучше указать .AtMost(0)
после оператора Returns.
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
, Хотя "броски" также работает, AtMost(0)
, более выразительно, по моему скромному мнению.
start "" "command with spaces.exe"
– Joey
30 October 2009 в 06:46
Используйте.AtMostOnce ();
После реального теста назовите метод снова. Если это выдает исключение, это назвали.
Украдено из: Ответ Джона Фостера на вопрос "Нужна помощь, чтобы лучше понять Moq"
Одна из вещей, которую вы, возможно, захотите проверить, это то, что метод pay не вызывается, когда человек старше 65 лет передается в метод
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { var mockPensionService = new Mock
(); var person = new Person("test", 66); var calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(person); mockPensionService.Verify(ps => ps.Pay(It.IsAny ()), Times.Never()); }
Запустить проверку после теста, для которого задано перечисление Times.Never
. например
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());