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

问题描述 投票:0回答:2

如果该方法是在以下情况下执行,则该方法将被评估为真 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 类型被设置为一个特定的值。我希望能清楚我想存档的内容。如何才能做到这一点?

c# moq
2个回答
4
投票

而不是使用 "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);

3
投票

试着打电话 VerifyIt.Is<Message>(Expression<Func<Message, bool>> match). 然后你可以在该委托中检查任意条件,例如,如果你有一个 string 的属性。

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

0
投票

添加另一个Assert并检查属性?消息作为一个对象,它是通过引用来传递的,你可以采取高峰。

© www.soinside.com 2019 - 2024. All rights reserved.