Alter Mock<;I类型>;对象.已调用object属性

本文关键字:调用 object 属性 对象 类型 Mock lt Alter gt | 更新日期: 2023-09-27 18:30:05

我目前正在编写单元测试,并使用Moq框架模拟依赖关系。在这样做的过程中,我创建了一个类似模拟:

Mock<ITraceProvider> traceProviderMock = new Mock<ITraceProvider>();
traceProviderMock.Setup(x => x.GetTraceContext(It.IsAny<string>())).Returns("test");
ITraceProvider traceObj = traceProviderMock.Object;

然而,稍后我想进一步修改mock的行为,所以我再次调用mock对象上的Setup

traceProviderMock.Setup(x => x.GetTracer(It.IsAny<string>())).Returns("tracer");

现在不再调用traceProviderMock.Object,这种新的模拟行为会反映在traceObj中吗?这就是我希望的情况。

这对Verify()方法肯定有效,但对Setup方法似乎无效。

我之所以要这样做,是因为我在测试设置方法中使用模拟依赖关系构建了一个完整的依赖关系图。我只想为我的特定测试改变一个被嘲笑的依赖项的行为。随后的测试也会将自己的专业知识应用于模拟依赖。

Alter Mock<;I类型>;对象.已调用object属性

这种行为实际上正如我所期望的那样工作。由于我的测试有问题,我实际上并没有调用新模拟的方法。这让我误以为这个嘲弄性的框架没有表现出来。

总之,您可以在调用了.Object之后更改mock,这些更改将反映在mock对象实例中。