5

Moq ページから試したリンクの半分は壊れており、公式の API ドキュメントへのリンクも含まれています。そこでここで質問します。

次のように、単一の「すべてをキャッチ」パラメーターを正常に使用しました。

mockRepo.Setup(r => r.GetById(It.IsAny<int>())).Returns((int i) => mockCollection.Where(x => x.Id == i).Single());

ただし、複数のパラメーターで同じ動作を実現する方法がわかりません。

mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>())).Returns( ..... );

....分からない部分です。


ヨルダンに応じて編集:

問題は、1 つだけではなく 3 つのパラメーターをどのように表すかです。

回す方法:

(int i) => mockCollection.Where(x => x.Id == i)

の中へ:

(int i), (string s), (int j) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == j)
4

4 に答える 4

7

これは、単一のパラメーターの場合とほとんど同じです。

.Returns
      (
         (int i, string s, int x) 
                => mockCollection.Where
                     (
                             x => x.Id == i 
                          && x.SomeProp == s 
                          && x.SomeOtherProp == x
                     )
      );

または、リターンの一般的なバリアントを使用します。

.Returns<int, string, int>
     (
          (i, s, x) 
               => mockCollection.Where
                    (
                         x => x.Id == i 
                         && x.SomeProp == s 
                         && x.SomeOtherProp == x
                    )
     );
于 2012-10-01T19:24:24.907 に答える
6

必要なのは次のとおりだと思います。

   mockRepo
       .Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>()))
       .Returns<int,string,int>((id, someProp, someOtherProp) =>
           mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x));
于 2012-10-01T19:28:36.150 に答える
2

正しいラムダをどのように書くのですか?

mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>()))
        .Returns((int i, string s, int i2) => doSomething() );
于 2012-10-01T19:32:20.777 に答える
0

この質問に対する Mark Seeman の回答を参照してください。

Moq Callback() 呼び出しで変数値を設定する

それは役立つかもしれません。

于 2012-10-01T19:32:38.000 に答える