3

次のインターフェースがあります

    public interface IMyInterface
{
    string this[string key] { get; set; }
}

テストにget/setを実装したい

var _Nvp = //...
var mockMyInterface = new Mock<IMyInterface>();
        mockMyInterface
            .Setup(e => e[It.IsAny<string>()])
            .Returns((string key) => _Nvp[key]);

        mockMyInterface
            .SetupSet(c => c[It.IsAny<string>()] = It.IsAny<string>())
            .Callback((string key, string value) => { _Nvp[key] = value; }));

しかし、それは機能しません。エラーもメッセージもありません。

        var oj = mockMyInterface.Object;
        oj["key"] = "value";
        var value = oj["key"];

変数値は常にnullです。

4

1 に答える 1

4

次のSOコメントをチェックしてください。

SetupSetでのMoq側の解決には制限があるようc[It.IsAny<string>()]です。特定のキーが指定されている場合に機能するようです。

あなたの場合、モックではなく、インターフェースを実装する内部状態のスタブを使用することをお勧めします。

于 2012-06-17T14:36:05.320 に答える