C# 如何模拟扩展类并实现接口的对象?

C# 如何模拟扩展类并实现接口的对象?,c#,unit-testing,mocking,nunit,C#,Unit Testing,Mocking,Nunit,我有这门课: 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 { IF

我有这门课:

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接口创建一个mock对象,它也允许我模拟BaseFoo类,因为我需要始终避免在MyClass.DoSomething()方法中运行“if(((FooClass)foo.BoolProp)”的“else”分支。
那么,如何创建一个mock对象来模拟MyClass中使用的BaseFoo.BoolProp的行为(它将采用IFoo的mock对象)
我这样做没有任何结果,因为“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);
var cMock=new Mock();
var iMock=cMock.As();
Setup(c=>c.BaseProp).返回(true);
MyClass MyClass=新的MyClass(iMock.Object);

如何声明一个从BaseFoo派生并实现IFoo的抽象类(basefooo?)。然后,您可以向moq显示BaseFooo。

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

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

很高兴这不起作用-这是类设计中的代码味道:您不应该将类型
IFoo
的依赖项强制转换为
BaseFoo
。你违反了Liskov替换原则,无论我怎么想,这都是一个糟糕的选择。我很想在这个问题上得到-1。。。