У меня есть этот объект dataAccess mock, и я пытаюсь проверить, что один из его методов вызывается, и что аргумент, переданный в этот метод, выполняет определенные ограничения. Насколько я могу судить, этот метод действительно вызывается и с соблюдением ограничений. Эта строка теста бросает MockException:Почему в мире этот тест Moq + NUnit не работает?
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()
, как я видел других людей? Если ответ ситуативный, какие ситуации могут привести к использованию одного над другим?
Какую версию Moq вы используете? –
Марк - ты поймал меня на бета-версии 4.0 без ее реализации, хотя я перешел на 3.1.0.0, и у меня все еще такая же проблема. – 2010-04-15 17:52:42
Я могу добавить, что я опробовал это из отчаяния: data.Setup (d => d.InsertInvoice (It.Is (i => i.TermPaymentAmount! = 0))). Броски (новое исключение ArgumentException («TermPaymentAmount») не было 0! ")); , и он ведет себя так, как ожидалось, и не выбрасывает это исключение, потому что Invoice.TermPaymentAmount = 0.(И это порождает исключение, когда я меняю сравнение на! = 0.) Таким образом, это выполняет ту же проверку, к которой я изначально стремился, хотя я не могу понять, почему мой первоначальный метод не работает. –
2010-04-21 18:37:17