如何使用 Verify() 方法仅验证某些属性?

How can I verify only certain properties using the Verify() method?

如果方法 SendToTargetMessage.

的类型被调用,则下面的计算结果为真
// Arrange
var osmMock = new Mock<OrderStateMachine>(MockBehavior.Strict, mapper, sessionId, repo);
osmMock.Setup(m => m.SendToTarget(It.IsAny<Message>())).Returns(true);
var osm = osmMock.Object;

// Act
// ...

// Assert
osmMock.Verify(m => m.SendToTarget(It.IsAny<Message>()), Times.Once);

然而,这非常广泛。

我想测试方法 SendToTarget 是通过 Message 实例调用的,该实例已将特定 属性 设置为特定值。

当然,我可以将 Message 的实例传递给这样的方法 osmMock.Verify(m => m.SendToTarget(It.Is(myMessageInstance)))。但我不想针对 Message 的完全传播实例进行验证。

我只想验证 Message 类型的特定 属性 是否设置为特定值。我希望很清楚我要存档的内容。如何才能做到这一点?

添加另一个断言并检查 属性?消息是一个对象,它是通过引用传递的,你可以取一个峰值。

尝试用 It.Is<Message>(Expression<Func<Message, bool>> match) 调用 Verify。然后您可以检查该委托中的任意条件,例如如果你有 string 属性:

osmMock.Verify(m => m.SendToTarget(It.Is<Message>(x => x.YourProperty == "some value")), Times.Once);

您可以使用 It.Is<Message> 和自定义表达式 Expression<Func<Message, bool>> 来验证传递的 Message 实例的 属性 值,而不是使用 It.IsAny<Message>()

osmMock.Verify(m => m.SendToTarget(It.Is<Message>(m => m.SomeProperty == someValue)), Times.Once);