GetValue
Moqを使用して、次のクラスのメソッドのみをモックしたい:
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;
}
}
これがMoqでどのように機能するかについては、すでに少し読んでいます。オンラインで見つけた解決策は、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();
}
Moq は既存の実装を使用し、MyMethod
モックされたメソッドを呼び出すと予想されます。その結果、次の出力が得られます。
ORIGINAL MyMethod: 999
MOCKED GetValue
しかし、それは私が得るものです:
ORIGINAL GetValue
ORIGINAL MyMethod: 10
その後
Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()
何かを完全に誤解しているような気がしました。ここで何が欠けていますか?どんな助けでもいただければ幸いです