2017-05-31 4 views
0

とSetupGet以下のコードを参照してください:複数のコールバック

mockBusinessLayer.Setup(m => m.Calculate(It.IsAny<integer>(), It.IsAny<integer>())).Callback 
      (() => mockBusinessLayer.SetupGet(y => y.FirstNumber).Returns(Helper.FirstNumber)); 
     mockBusinessLayer.Setup(m => m.Calculate(It.IsAny<integer>(), It.IsAny<integer>())).Callback 
      (() => mockBusinessLayer.SetupGet(y => y.SecondNumber).Returns(Helper.SecondNumber)); 

計算は、()2つの整数を受け取り、それらを一緒に追加されます。同じモックオブジェクトに複数のSetupGetを設定するにはどうすればよいですか?上記のコードは、SecondNumberでGetコールバックを設定するだけです(SetupGetが最後に呼び出されたためです)。

更新

これは、私がテストしようとしている機能である:

public CalculatorDTO Calculate(int NumberOne, int NumberTwo) 
     { 
       _Calculator.Calculate(NumberOne, NumberTwo); 
       return Mapper.Map<CalculatorDTO>(_changeCalculator); 
      } 
     } 

は、それがこれを行うには、より良いです:

mockBusinessLayer.Setup(X => x.FirstNumber)戻り値(Helper.FirstNumber); mockBusinessLayer.Setup(x => x.SecondNumber)。返されます(Helper.SecondNumber);

+1

これは仕様です。 Moqは、メンバーの最後の設定のみを認識します。あなたは何を試そうとしていますか? – Nkosi

+0

@ Nkosi、複数のセットアップが可能ですか:SetupGet() – w0051977

+0

テストしようとしていることを示して、私たちが問題を解決するのに役立つかどうかを見てみましょう。 – Nkosi

答えて

2

あなたは言う:

上記のコードだけ(それはSetupGetが呼び出された最後の時間であるため)SecondNumberの取得コールバックを設定します。

しかし、それは非常に適切ではありません。CalculateSetupにあなたの呼び出しは同じであり、したがって、もう一つは第一に優先します。あたかも最初にSetupが起こらなかったかのようです。

CallbackSetupGetをコールする必要はなく、混乱します。 SecondNumberHelper.SecondNumberを返すためにも同様に

mockBusinessLayer.SetupGet(y => y.FirstNumber).Returns(Helper.FirstNumber) 
mockBusinessLayer.SetupGet(y => y.SecondNumber).Returns(Helper.SecondNumber) 
mockBusinessLayer.Setup(m => m.Calculate(It.IsAny<integer>(), It.IsAny<integer>())); 

FirstNumberを得ている任意の時間は、それがHelper.FirstNumberを返します、と私はこのようにそれを設定したいです。


すべてのことは、それが前方に移動するために、より完全な手順を提供するのは難しい(何種類_Calculatorているのですか?あなたのmockBusinessLayerが本当にFirstNumber/SecondNumberCalculateを公開していますか?)あなたのコードの複数がなく、言われています。たとえば、このメソッドをテストする場合は、Mapper.Mapメソッドの設定を表示しないでください。あなたの更新に応じて


...

SetupGetは少しクリーナーAPIを提供しています:あなたはSetupあなたがActionを渡すことができるようになる一方で、Funcに合格するために必要です。わずかに制限されたISetupGetインターフェイスを返します。 SetupGetもより良いセマンティクスを持っており、読者にgetをセットアップするつもりであることを示しています。

Moqソースでは、実際には同じコードに沸騰するので、仕事も同様に行われます。

+0

ありがとうございます。セットアップよりSetupGetを使用する利点は何ですか? (私の質問の更新を見てください)。 – w0051977

+0

@ w0051977更新を参照 –

+0

更新いただきありがとうございます。最後に、Kenneth K氏(私の営業の下で)のコメントでは、「発症時にすべてをセットアップする」と述べています。これはあなたがここでやったことなのですか、それとも「より良い」方法ですか?再度、感謝します。 – w0051977

関連する問題