0

私は単体テストに Moq を使用しており、次のような期待値を設定しました。

myMock.Expect(w => w.MyMethod(It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<System.Exception>(), null))
      .Returns(myResult);

それが嘲笑している方法は次のとおりです。

logger.WriteLogItem(string1, string2, string3, System.Exception, IEnumerableInstantiation);

これは正常にビルドおよび実行されますが、VerifyAll() が渡されず、次のエラーが表示されます。

Moq.MockVerificationException : The following expectations were not met:
IMyClass l => l.MyMethod(It.IsAny<string>(), It.IsAny<string>(), 
                         It.IsAny<string>(), It.IsAny<String>(), null)

そのため、何らかの理由で例外を文字列に変更しています....

誰かがこれを前に見たことがありますか/なぜこれを行っているのか、それを修正/回避するために何ができるか考えていますか?

ありがとう!

4

2 に答える 2

2

あ、初歩的なミスだった!そして、変換のことは、そこにないクレイジーな答えを探してインターネットを追いかけさせるように設計された単なるおせっかいでした.

myMock.Object を呼び出し元のコマンドに渡していませんでした!

于 2009-08-05T14:46:52.360 に答える
0

さて、パラメータとして例外を持つテストメソッドを作成し、上記の方法で moq を使用して呼び出したところ、正常に機能しました。したがって、例外をパラメーターとして渡すこと自体は問題ではないようです。

また、最初のパラメーターを列挙値から It.IsAny 列挙に変更しました。だからから

myMock.Expect(w =>
    w.MyMethod(**MyEnum.Value**,
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<System.Exception>(),
        null))
.Returns(myResult);

myMock.Expect(w =>
    w.MyMethod(**It.IsAny<MyEnum>()**,        
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<System.Exception>(),
        null))
.Returns(myResult);

そして、私が得た出力は次のとおりです。

IMyClass l =>
    l.MyMethod(IsAny<MyEnum>(),
        IsAny<MyEnum>(), 
        IsAny<MyEnum>(),
        IsAny<MyEnum>(),
        null)

そのため、何らかの理由で最初のパラメーターの型を取得し、それを残りのすべてに適用しているように見えます.....

于 2009-08-05T11:30:13.110 に答える