値を適切に返すために内部メソッドに依存するパブリック メソッドを含むクラスがあります。
次のクラスとテスト ファイルを考えてみましょう。
public class ClassUnderTest
{
public string NotMockedPublicMethod()
{
return MockedMethod();
}
virtual public string MockedMethod()
{
return "original";
}
}
次のテスト ケースが機能します。
var mock = new Mock<ClassUnderTest> { CallBase = true };
mock.Setup(m => m.MockedMethod()).Returns("mocked");
Assert.AreEqual("mocked", mock.Object.NotMockedPublicMethod());
しかしMockedMethod()
、私のこれは外部的には役に立たないとしましょう。問題は、このメソッドをinternal
(InternalsVisibleTo()
適切に使用しても)次のようにマークすることです。
virtual internal string MockedMethod()
は、まったく同じテストをメッセージで失敗させますAssert.AreEqual failed. Expected:<mocked>. Actual:<original>
。
これは Moq のバグですか、それとも何らかの制限ですか?