我有這個類:如何模擬擴展類並實現接口的對象?
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課呢,因爲我需要一個模擬對象總是避免運行MyClass.DoSomething()方法中的「if((((FooClass)foo).BoolProp)」的「else」分支。
那麼,如何創建一個模擬對象,允許我模擬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);
快樂起來,這並不工作 - 這是在你的類設計代碼味道:你應該不要將類型爲「IFoo」的依賴轉換爲「BaseFoo」。您違反了Liskov替代原則,並且以我能想到的任何方式做這件事都是不好的選擇。 – BrokenGlass 2011-12-20 10:08:34
我很想去這個問題上-1 – vaitrafra 2012-04-10 15:50:56