gpt4 book ai didi

c# - 模拟(使用最小起订量)返回模拟对象的方法的正确方法?

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:02 24 4
gpt4 key购买 nike

哪一个是正确的?

var mockLogger = new Mock<EntLibLogger>();
mockLogger.Setup(i => i.CreateTracer(It.IsAny<string>()))
.Returns((string operationName) =>
{
var mockTracer = new Mock<EntLibTracer>(operationName);
mockTracer.Setup(i => i.IsTracingEnabled())
.Returns(true);
mockTracer.CallBase = true;

return mockTracer.Object;
});
mockLogger.CallBase = true;

//EntLibLogger.Current is a singleton that is shared across multiple threads.
//This Initialize method will set EntLibLogger.Current to the mocked instance
//instead of the default (non-mocked) configuration
EntLibLogger.Initialize(mockLogger.Object);

var mockTracer = new Mock<EntLibTracer>(operationName);
mockTracer.Setup(i => i.IsTracingEnabled())
.Returns(true);
mockTracer.CallBase = true;

var mockLogger = new Mock<EntLibLogger>();
mockLogger.Setup(i => i.CreateTracer(It.IsAny<string>()))
.Returns(mockTracer.Object);
mockLogger.CallBase = true;

EntLibLogger.Initialize(mockLogger.Object);

我相信第一种方法是正确的,但我不确定 Moq 是否在幕后做了一些魔术并且只是想验证 :)

最佳答案

我想主要的问题是,如果它调用 CreateTracer 两次,您想发生什么。在第一个版本中,您将获得两个不同的模拟示踪剂;在第二个你会得到相同的两次。

第二个版本是我通常在 jMock、EasyMock 和 Rhino.Mocks 中使用的版本 - 但我没有任何 Moq 经验,所以使用第一个版本可能更符合习惯在那里形成。第二个更简单,IMO :)

关于c# - 模拟(使用最小起订量)返回模拟对象的方法的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1218302/

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