gpt4 book ai didi

c# - 使用 Moq 模拟具有 'new' 成员的接口(interface)

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

我在模拟一组接口(interface)时遇到问题:

interface IFoo
{
object Blah { get; }
}

interface IBar : IFoo
{
new string Blah { get; }
}

我试着 mock 为:

var mock = new Mock<IFoo>();
mock.SetupGet(m => m.Blah).Returns("Blah");

这现在有效:

Assert.That(mock.Object.Blah, Is.EqualTo("Blah"));

问题是,当我添加以下内容时,IBar 接口(interface)也有一个值,IFoo.Blah 的值为 null。

var bar = mock.As<IBar>();
bar.SetupGet(m => m.Blah).Returns("Blah");

这现在有效:

Assert.That(((IBar)mock.Object).Blah, Is.EqualTo("Blah"));

但是旧的失败了:

Assert.That(mock.Object.Blah, Is.EqualTo("Blah"));
// mock.Object.Blah is null now

有没有办法让两者都起作用?

最佳答案

对于最小起订量 (v4.0.10827) 和 .Net 4,此代码有效:

var mock = new Mock<IFoo>();
var bar = mock.As<IBar>();
mock.SetupGet(m => m.Blah).Returns("Blah");
Assert.That(mock.Object.Blah, Is.EqualTo("Blah"));
bar.SetupGet(m => m.Blah).Returns("BlahBlah");
Assert.That(((IBar)mock.Object).Blah, Is.EqualTo("BlahBlah"));
Assert.That(mock.Object.Blah, Is.EqualTo("Blah"));

您必须在设置您的属性之前初始化您的界面。

关于c# - 使用 Moq 模拟具有 'new' 成员的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170186/

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