gpt4 book ai didi

c# - 如何模拟扩展类并实现接口(interface)的对象?

转载 作者:太空狗 更新时间:2023-10-30 01:08:45 24 4
gpt4 key购买 nike

我有这门课:

public class BaseFoo
{
public bool BoolProp { get; set; }
}

public interface IFoo {
void Method();
}

public class FooClass : BaseFoo, IFoo
{
public void Method()
{
// DoSomething
}
}

public class MyClass
{
IFoo foo; //
public MyClass(IFoo foo)
{
this.foo = foo;
}

public void DoSomething()
{
if (((FooClass)foo).BoolProp)
{
// yeah
}
else
{
//bad
}
}
}

我的场景是:

    void main()
{
MyClass obj = new MyClass(new FooClass());
obj.DoSomething();
}

我想为 IFoo 接口(interface)创建一个模拟对象,它允许我也模拟 BaseFoo 类,因为我需要始终避免运行“if (((FooClass)foo).BoolProp”的“else”分支)"在 MyClass.DoSomething() 方法中。
那么,我如何创建一个模拟对象来模拟 MyClass 中使用的 BaseFoo.BoolProp 的行为(它将采用 IFoo 的模拟对象)?
我这样做没有任何结果,因为“BoolProp”不是虚拟的,我无法更改它,因为它是 .NET Framework 类的一部分:

  var cMock = new Mock<BaseFoo>();
var iMock = cMock.As<IFoo>();

cMock.Setup(c => c.BaseProp).Returns(true);
MyClass myClass = new MyClass(iMock.Object);

最佳答案

您的设计真正要表达的是您的类 MyClass 不依赖于 IFoo,它依赖于派生自 BaseFoo 的类实例 实现IFoo。在这种情况下,最好引入一个统一的接口(interface),然后可以将其用作依赖项和模拟:

interface IFooBar
{
bool BoolProp { get; set; }
void Method();
}

关于c# - 如何模拟扩展类并实现接口(interface)的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8573633/

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