У меня есть этот фиктивный объект dataAccess, и я пытаюсь убедиться, что один из его методов вызывается и что аргумент, передаваемый в этот метод, удовлетворяет определенным ограничениям. Насколько я могу судить, этот метод действительно вызывается и с выполненными ограничениями. Эта строка теста выдает исключение MockException:
data.Verify(d => d.InsertInvoice(It.Is<Invoice>(i => i.TermPaymentAmount == 0m)), Times.Once());
Однако, снятие ограничения и принятие любого счета-фактуры проходит тест:
data.Verify(d => d.InsertInvoice(It.IsAny<Invoice>()), Times.Once());
Я создал тестовую форму окна, которая создает экземпляр этого тестового класса, запускает его метод .Setup()
и затем вызывает метод, который я хочу протестировать. Я вставляю точку останова в строку кода, где фиктивный объект не проходит тест
data.InsertInvoice(invoice);
для фактического наведения на накладную, и я могу подтвердить, что ее десятичное свойство .TermPaymentAmount
действительно равно нулю в момент вызова метода.
В отчаянии я даже добавил обратный вызов в свой макет dataAccess:
data.Setup(d => d.InsertInvoice(It.IsAny<Invoice>())).Callback((Invoice inv) => MessageBox.Show(inv.TermPaymentAmount.ToString("G17")));
И это дает мне окно сообщения, показывающее 0
. Это действительно сбивает с толку меня, и никто в моем магазине не смог понять это. Любая помощь будет оценена.
Едва ли связанный вопрос, который я, вероятно, должен задать независимо, заключается в том, предпочтительнее ли использовать Mock.Verify()
, как у меня здесь, или использовать Mock.Expect()
. Подтверждаемый, сопровождаемый Mock.VerifyAll()
, как я видел, что другие люди делают? Если ответ ситуационный, какие ситуации оправдывают использование одного над другим?