gpt4 book ai didi

c# - Mock.Of<对象> VS 模拟<对象>()

转载 作者:IT王子 更新时间:2023-10-29 04:43:45 26 4
gpt4 key购买 nike

我目前对如何模拟感到困惑。

我正在使用最小起订量。为了模拟对象我通常这样写<​​/p>

 var mockIRepo = new Mock<IRepo>();

但是,我需要为我的设置创建模拟对象。

选项 1以这种方式模拟仅包含属性的对象是否更好?

 var object = Mock.Of<Object>()

选项 2或者这样

 var object = new Mock<Object>()

我读到选项 2 有设置属性,这对我来说有点疑问,因为我也可以在选项 1 中设置属性。

那有什么区别呢?或者有更好的方法吗?

最佳答案

这篇文章帮助我理解了 Mock.Of : Old style imperative Mock<T> vs functional Mock.Of<T>

正如帖子中所解释的,对于 Mock.Of 你是在说“给我一个像这样的模拟”(或者 Mock s.Of 如果你需要获取许多对象(IEnumerable))。它使 mock 的声明更加简洁。

Mock 示例(返回 Mock)

var el1 = new Mock<IElementInfo>();
el1.Setup(x => x.Id).Returns(Guid.NewGuid());
el1.Setup(x => x.Multiplicity).Returns(Multiplicity.Single);

var c1 = new Mock<ICollectionInfo>();
c1.Setup(x => x.Id).Returns(Guid.NewGuid());
c1.Setup(x => x.Multiplicity).Returns(Multiplicity.Multiple);

var p1 = new Mock<IPropertyInfo>();
p1.Setup(x => x.Id).Returns(Guid.NewGuid());
p1.Setup(x => x.Name).Returns("Foo" + Guid.NewGuid().ToString());
p1.Setup(x => x.Type).Returns("System.String");

var p2 = new Mock<IPropertyInfo>();
p2.Setup(x => x.Id).Returns(Guid.NewGuid());
p2.Setup(x => x.Name).Returns("Bar" + Guid.NewGuid().ToString());
p2.Setup(x => x.Type).Returns("System.String");

var elementInfoMock = new Mock<IElementInfo>();
elementInfoMock.Setup(e => e.Id).Returns(Guid.NewGuid());
elementInfoMock.Setup(e => e.Multiplicity).Returns(Multiplicity.Multiple);
elementInfoMock.Setup(e => e.Elements)
.Returns(new List<IAbstractElementInfo>
{
el1.Object,
c1.Object,
});
elementInfoMock.Setup(x => x.Properties).Returns(
new List<IPropertyInfo>
{
p1.Object,
p2.Object,
});

this.elementInfo = elementInfoMock.Object;

使用 Mock.Of 的相同示例(返回类的实例)

this.elementInfo = Mock.Of<IElementInfo>(x =>
x.Id == Guid.NewGuid() &&
x.Multiplicity == Multiplicity.Multiple &&
x.Elements == new List<IAbstractElementInfo>
{
Mock.Of<IElementInfo>(e => e.Id == Guid.NewGuid() && e.Multiplicity == Multiplicity.Single),
Mock.Of<ICollectionInfo>(e => e.Id == Guid.NewGuid() && e.Multiplicity == Multiplicity.Single),
} &&
x.Properties == new List<IPropertyInfo>
{
Mock.Of<IPropertyInfo>(p => p.Id == Guid.NewGuid() && p.Name == "Foo" + Guid.NewGuid() && p.Type == "System.String"),
Mock.Of<IPropertyInfo>(p => p.Id == Guid.NewGuid() && p.Name == "Foo" + Guid.NewGuid() && p.Type == "System.String"),
});

关于c# - Mock.Of<对象> VS 模拟<对象>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042633/

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