我想嘲笑只有以下類的GetValue
方法,使用起訂量:類的部分嘲諷與起訂量
public class MyClass
{
public virtual void MyMethod()
{
int value = GetValue();
Console.WriteLine("ORIGINAL MyMethod: " + value);
}
internal virtual int GetValue()
{
Console.WriteLine("ORIGINAL GetValue");
return 10;
}
}
我已經讀了一下這個應該怎麼用起訂量工作。我在網上找到的解決方案是使用CallBase
屬性,但這對我不起作用。
這是我的測試:
[Test]
public void TestMyClass()
{
var my = new Mock<MyClass> { CallBase = true };
my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999);
my.Object.MyMethod();
my.VerifyAll();
}
我預料起訂量使用現有實現的MyMethod
並調用模擬的方法,從而產生以下的輸出:
ORIGINAL MyMethod: 999
MOCKED GetValue
但是這就是我得到:
ORIGINAL GetValue
ORIGINAL MyMethod: 10
然後
Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()
我覺得,我完全誤解了一些東西。我在這裏錯過了什麼? 任何幫助,將不勝感激
可能重複方法?](http://stackoverflow.com/questions/2822947/when-mocking-a-class-with-moq-how-can-i-callbase-for-just-specific-methods) – StriplingWarrior
如果你讓你的' GetValue'方法'public'而不是'internal'它的工作原理。我不知道爲什麼這可能是Castle動態代理的限制,或者它是Moq的錯誤,或者這是預期的行爲。無論如何,如果將其作爲內部使用,除非使用InternalVisibleTo,否則不能將生產代碼放到不同的部件中。 – nemesv
[驗證方法被稱爲]的可能重複(http://stackoverflow.com/questions/1980108/verifying-a-method-was-called) – nemesv