如何使用 Verify() 方法仅验证某些属性?
How can I verify only certain properties using the Verify() method?
如果方法 SendToTarget
以 Message
.
的类型被调用,则下面的计算结果为真
// 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);
如果方法 SendToTarget
以 Message
.
// 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);