7

値を適切に返すために内部メソッドに依存するパブリック メソッドを含むクラスがあります。

次のクラスとテスト ファイルを考えてみましょう。

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()、私のこれは外部的には役に立たないとしましょう。問題は、このメソッドをinternalInternalsVisibleTo()適切に使用しても)次のようにマークすることです。

virtual internal string MockedMethod()

は、まったく同じテストをメッセージで失敗させますAssert.AreEqual failed. Expected:<mocked>. Actual:<original>

これは Moq のバグですか、それとも何らかの制限ですか?

4

1 に答える 1