gpt4 book ai didi

c# - 使用 Moq 验证具有正确命令参数的 CommandHandler 方法调用

转载 作者:行者123 更新时间:2023-11-30 16:21:41 26 4
gpt4 key购买 nike

我有以下测试用例:

    [Test]
public void MarkAsSuccessfulTest()
{
//setup data
var payment = Util.DbUtil.CreateNewRecurringProfilePayment();

//unit test

var mockNotificationSender = new Mock<IMarkAsSuccessfulNotificationSender>();
var mockCommandHandler = new Mock<IDbCommandHandler<RecurringPaymentMarkAsSuccessfulCommand>>();

var classUnderTest = new RecurringProfileMarkLastPaymentAsSuccessful(mockCommandHandler.Object, mockNotificationSender.Object);

classUnderTest.MarkAsSuccessful(payment.RecurringProfile);
mockCommandHandler.Verify(x=>x.Handle(It.IsAny<RecurringPaymentMarkAsSuccessfulCommand>()), Times.Once());
mockNotificationSender.Verify(x=>x.SendNotification(payment), Times.Once());

}

问题出在线路上:

mockCommandHandler.Verify(x=>x.Handle(It.IsAny<RecurringPaymentMarkAsSuccessfulCommand>()), Times.Once())

这验证调用了 .Handle() 方法。然而,这对于测试来说还不够——这个 .Handle() 接受一个命令参数,它有一个属性——Payment。我想验证此参数是否确实与 payment 变量匹配。

这可能吗,还是某些代码设计存在问题?

最佳答案

您可以提供谓词进行参数验证:

mockCommandHandler.Verify(x => 
x.Handle(It.Is<RecurringPaymentMarkAsSuccessfulCommand>(c => c.Payment == payment))
, Times.Once());

关于c# - 使用 Moq 验证具有正确命令参数的 CommandHandler 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com