如果该方法是在以下情况下执行,则该方法将被评估为真 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
类型被设置为一个特定的值。我希望能清楚我想存档的内容。如何才能做到这一点?
而不是使用 "MockBehavior.Strict"、"mapper"、"... "等。It.IsAny<Message>()
你可以用 It.Is<Message>
自定义表达 Expression<Func<Message, bool>>
来验证传递的属性值 Message
诸如此类
osmMock.Verify(m => m.SendToTarget(It.Is<Message>(m => m.SomeProperty == someValue)), Times.Once);
试着打电话 Verify
与 It.Is<Message>(Expression<Func<Message, bool>> match)
. 然后你可以在该委托中检查任意条件,例如,如果你有一个 string
的属性。
osmMock.Verify(m => m.SendToTarget(It.Is<Message>(x => x.YourProperty == "some value")), Times.Once);
添加另一个Assert并检查属性?消息作为一个对象,它是通过引用来传递的,你可以采取高峰。