gpt4 book ai didi

c# - 在调用 .Object 属性后更改 Mock 对象

转载 作者:可可西里 更新时间:2023-11-01 07:45:38 24 4
gpt4 key购买 nike

我目前正在编写单元测试并使用 Moq 框架模拟依赖项。为此,我创建了一个 Mock,如下所示:

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

但是稍后我想稍微修改模拟的行为,所以我再次调用 Mock 对象上的 Setup:

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

现在无需再次调用 traceProviderMock.Object,这个新的模拟行为是否会反射(reflect)在 traceObj 中?这就是我希望的情况。

这绝对适用于 Verify() 方法,但似乎不适用于 Setup 方法。

我之所以要这样做,是因为我已经使用模拟依赖项在测试设置方法中构建了完整的依赖关系图。我只想为我的特定测试更改其中一个模拟依赖项的行为。后续测试也会将它们自己的特化应用于模拟的依赖项。

最佳答案

此行为实际上如我所料。由于我的测试存在问题,我实际上并没有调用新模拟的方法。这让我误以为模拟框架没有正常运行。

总而言之,您可以在调用 .Object 之后更改模拟,并且更改将反射(reflect)在模拟对象实例中。

关于c# - 在调用 .Object 属性后更改 Mock<IType> 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com