0

私はこの問題を理解するためにかなりの時間を費やしてきましたが、今のところ運がありません。私は以下に模擬試験を実装しようとしています

私は2つのインターフェースでサービスを提供しています。1つは電子メール/ツイートメッセージを受信することであり、もう1つはそれらに返信することです。これらのインターフェースは、アサートする必要のある情報をログに記録します。ただし、これまでの私の問題は、2つのインターフェイスを適切にモックする方法です。詳細は以下のとおりです。

   [ServiceContract]
   Name=emailsystem
   callabackcont=typeof(Iemailcallback)
   Public Interface IemailReceived
   [OperationContract]
   Void EmailReceived(EmailResponse message, int messgID)



    //Than in my DataContract I have 
    [DataContract(Name=EmailRequest...]

     public EmailReceived(Email message, int mssgID)
     {

     }




    //for my response interfact Iemailcallback I have 
    [ServiceContract(Name= "xyz")]

    [OperationContract] (IsOneWay=true   )
    void EmailResponse(emailResponse)

     //for the above interface I have data contract 
     [DataContract]
     EmailResponse 
     this(status, mssg)

NUnitのMoqを使用してEmailResponseとEmailRequestをモックテストしようとしています。私はさまざまな方法を試しましたが、何も機能しません。モックを作成しました

   var mockEmailRequest = new Mock<IEMailRequest>
   var mockEmailResponse = new Mock<Iemailcallback>

since I dont have return type on the methods so I guess it goes something like in setup


    mockEmailResponse.setup(x+>x.EmailResponse).Callback(.....);

実装方法がわからない。どんな助けでも大歓迎です。

4

2 に答える 2

0

Verifyモックでこの機能を使用する必要があります。これを行うにはいくつかの方法があります。

//when you know the parameter values to expect
mockEmailRequest.Verify(r=>r.EmailReceived(expectedEmail, expectedId));

//when you just want to verify some detail about the values
mockEmailRequest.Verify(r=>r.EmailReceived(It.Is<EmailResponse>(r=>r.Subject == "Something"), It.Is<int>(i=>i > 17)));

//when you don't care about the values
mockEmailRequest.Verify(r=>r.EmailReceived(It.IsAny<EmailResponse>(), It.IsAny<int>()));

これについて詳しくは、Moqクイックスタートページをご覧ください

于 2013-01-31T04:49:32.510 に答える
0

インターフェイスをモックすることはできますが、戻り値の型が void の場合、出力/機能をテストすることはできません。

送信されているオブジェクトを変更している場合は、それを確認してください。そうでなければブラックボックスです。

おそらく代わりにすべきことは、テスト スイートにインターフェイスを実装し、EmailResponse と EmailReceived のメソッド本体については、パラメーターをコンソールに出力するだけです。

例えば:


public class EmailTestImplemtation : IEmailReceived {
   void EmailReceived(EmailResponse message, int messgID) {
      Console.out.WriteLine("Message: " + message.toString() + " MessageID: " + messgID);
   }
}

ただし、これは、パラメーターがコードの他の部分で正しく渡されていることを証明するだけであるため、ほとんど役に立ちません。

依存関係に到達すると、インターフェイスをモックできますが、依存関係を実際に単体テストすることはできません。つまり、ライブ データベースに対して単体テストを実行しません。データベース上で使用されるインターフェイスをモックしますが、ストアド プロシージャ/クエリを実行する実際の関数は、単体テストではなく統合テスト用に残します。

于 2013-01-31T03:28:30.570 に答える