У меня есть этот класс:
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, который бы позволял мне также имитировать класс BaseFoo, потому что мне всегда нужно избегать запуска ветви "else" if (((FooClass) foo) .BoolProp ) "в методе MyClass.DoSomething ().
Итак, как я могу создать фиктивный объект, который позволяет мне имитировать поведение BaseFoo.BoolProp, используемого в MyClass (который будет принимать фиктивный объект 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);