2013-02-25 17 views
8

こんにちは、私はMoqのテストには新しく、簡単なアサーションを行うのに苦労しています。私はIAddインターフェイスのインターフェイスMoq testing void method

public interface IAdd 
{ 
    void add(int a, int b); 
} 

部品番号を使用しています は次のとおりです。

Mock<IAdd> mockadd = new Mock<IAdd>(); 
    mockadd.Setup(x => x.add(It.IsAny<int>(), It.IsAny<int>()).callback((int a, int b) => { a+b;}); 
    IAdd testing = mockadd.Object; 

add方法が無効であるので、それはとアサートする任意の値を返しません。どうすればこの設定をアサートできますか?

+2

あなたは何を試そうとしていますか? – GolfWolf

+0

私はそのメソッドをテストしようとしていますが、戻り値の型はありません。戻り値の型がint型の場合は、Assert.AreEqual(mockadd.add(2,2)、4)をテストします。しかし、戻り値の型なしでは、どのようにaddメソッドをテストしますか? –

+2

** 1 **インターフェイス(または模擬実装)をテストするのは意味がありません。 ** 2 ** **何かを計算するクラスがある場合は、何らかの形で結果を返すことができます(戻り値またはそのオブジェクトのいくつかのプロパティを使用)。 – GolfWolf

答えて

14

より多くのコンテキストを提供するために良いが、通常はこのように使用:モックが使用されているのはなぜ

var mockAdd = new Mock<IAdd>(); 
mockAdd.Setup(x => x.Add(1, 2)).Verifiable(); 

//do something here what is using mockAdd.Add 

mockAdd.VerifyAll(); 
+0

Pavel、もう少し説明してもらえますか?ここではmockAdd.Addを使って何かをやってください。私は同様の問題に悩まされていて、何を追加するか分からない "ここで何かmockAdd.Addを使用しています" – Maddy

18

を?これは、SUT(被試験システム)が依存関係(模擬すべき)と正しく相互作用することを検証するために使用されます。正しい相互作用とは、正しい依存関係のメンバを正しいパラメータで呼び出すことを意味します。

は、疑問符で返された値でアサートしないでください。これは生産コードと関係のないダミー値です。あなたが主張すべき唯一の値は、SUTによって返される値です。アサーションを書く必要があるのはSUTだけです。

また、は、テストインターフェイスを使用しないでください。テストするものはないからです。インターフェイスは単なるAPIの説明です。実装されていません。だから、ここでテストしているコードは止めて考えてください。これはあなたのアプリケーションで実行される実際のコードですか?

したがって、IAddインターフェイスを使用するテストオブジェクトに対してのみ、IAddインターフェイスをモックする必要があります。

+0

こんにちはSergey、私はこのモックテストでは新しいです。私は実行するvoidメソッドを避けたい、メソッドは、データベースを更新し、theerはそうするより良い方法ですか? –