12

こんにちは私はMoqテストに不慣れで、単純なアサーションを行うのに苦労しています。私はインターフェースを使用しています

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

IAddインターフェイスのMoqは次のとおりです。

  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メソッドは無効であるため、Assertwithに値を返しません。この設定をどのように主張できますか?

4

2 に答える 2

22

なぜモッキングが使われるのですか?SUT (テスト対象のシステム) がその依存関係 (モックする必要があります) と正しく相互作用することを確認するために使用されます。正しい対話とは、正しいパラメーターを使用して正しい依存関係メンバーを呼び出すことを意味します。

mock によって返された値をアサートしないでください。これは、製品コードとは関係のないダミー値です。アサートする必要がある唯一の値は、SUT によって返される値です。アサーションを作成する必要があるのは SUT だけです。

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

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

于 2013-02-25T16:10:31.670 に答える
20

より多くのコンテキストを提供する方が良いですが、通常は次のように使用されます。

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

//do something here what is using mockAdd.Add

mockAdd.VerifyAll();
于 2013-02-25T16:04:25.767 に答える