2016-05-25 12 views
-1

次のユニットテストがあります。さらにカスタマイズMOQを使用した戻り値

[TestMethod]  
    public void IfTheSecondPaymentFailsThenTheFirstPaymentShouldBeVoided() 
    { 
     var iPaymentMock = new Mock<IPaymentMock>(); 
     var paymentSpecificationResponse = new PreregisteredAccountSpec(); 
     iPaymentMock.Setup(
       counter => counter.ProcessPayment 
        (
         It.IsAny<Context>(), 
         It.IsAny<PreregisteredAccountSpec>(), 
         It.IsAny<Guid>()) 
        ). 
       Returns((Context context, PaymentSpecification spec, Guid guid) => 
       { 
        return paymentSpecificationResponse; 
       } 
       ); 
    } 

どのように分布アレイが読み取り専用である場合に「1」とpaymentSpecificationResponse.Distributions [0] .Transaction.GetVendorId()を返すようにテストを変更することができます。

答えて

1

私が正しく理解していれば、渡されたパラメータに基づいてモックの戻り値を変更する必要があります。あなたは.Returns()の過負荷を使用し、機能を提供することができます。

.Returns((context, spec, guid) => { //Do something with the arguments passed to the mock }) 
+0

私は私の質問があったはずでした。私はpaymentSpecificationResponse.Distributions [0]を設定できないときに、どのようにpaymentSpecificationResponseを変更する必要がありますか? paymentSpecificationResponseはサードパーティ製のDLLの一部です。 –

+0

私は今理解しています。残念ながら、第三者のクラスを見ることができないと、決定的な答えを出すのは難しいです。あなたが呼び出すことができる 'SetVendorId()'関数はありますか? '.Transaction'をモックに設定できますか? – mdickin

+0

実際、彼らは配布を追加するAddDistributionメソッドを持っていました。有効なディストリビューションを作成し、AddDistributionメソッドを使ってそれを追加することは私の仕事でした。 –

関連する問題