12

質問の最後に: C# で Moq を使用してインデクサーを設定する 、誰かが私が抱えている問題を強調したという問題がありました。しかし、解決策は見つかりませんでした。

It.IsAny<string>具体的には、ジェネリックをキーのマッチャーとして使用し、 を介して値を設定しようとしていますIt.IsAny<object>。インデックス経由でアクセスして値を設定すると、一致せず、コールバック メソッドにアクセスしません。そのため、単体テストは失敗しています。

var stateTable = new HashTable;
var httpSession = new Mock<HttpSessionStateBase>();

//works via httpSession.Add(key, value);
httpSession.Setup(x => x.Add(It.IsAny<string>(), It.IsAny<object>()))
    .Callback((string index, object value) => {
        var i = index;
        var v = value;

            stateData[i] = v;
    });

//does not work via httpSession[key] = value;
httpSession.SetupSet(x => x[It.IsAny<string>()] = It.IsAny<object>())
    .Callback( (string index, object value) => {
        var i = index;
        var v = value;

        stateData[i] = v;
});

Moq 4.0.10827 を使用しています

4

3 に答える 3

10

私の経験では、これは機能しません。It.IsAny をインデクサー式のマッチャーとして使用することはできません。ただし、インデクサーに具体的な値を入れると一致します。たとえば、次のように動作します。

httpSession.SetupSet(x => x["someValue"] = It.IsAny<object>())
    .Callback( (string index, object value) => {
        var i = index;
        var v = value;

        stateData[i] = v;
});
于 2011-06-09T17:31:46.410 に答える
2

これは、読み取りを確認するために行ったことです。

_httpSessionStateBaseMock.VerifySet(x => x["keyname"] = It.IsAny<YourObject>(), Times.Once());

私が行ったばかりの読み取りのために

_httpSessionStateBaseMock.Verify(x => x["keyname"],Times.Once());
于 2011-08-02T13:45:55.620 に答える