18

私は単体テストでmoqを使用してオブジェクトをモックしてきましたが、moq に関するサイトで、クラスとインターフェイスの両方をモックできることを見てきました。

先日、同僚の 1 人と話し合ったところ、クラスをモックする理由はなく、インターフェイスのみをモックする必要があるとのことでした。

私はそれに対する答えを本当に持っていませんでした....そして、moqサイトでも答えが見つからないようです。

クラスを決してモックしてはいけないというのは本当ですか? それが本当なら、Moqはそれを許可しないので、私はノーと言います....それでは、インターフェースを介してクラスをモックする方が良い時がありますか? クラスのモックとインターフェイスのモックの違いは何ですか? それとも本当に単なる好みの問題ですか?

4

2 に答える 2

16

クラスをモックすることは完全に有効です。ただし、MoQ では、クラスの仮想メソッドとプロパティのみをモックできます。

インターフェイスの代わりに抽象基本クラスがある場合、または拡張ポイントとしてデフォルトの実装と仮想クラスを持つクラスがある場合に役立ちます。モックする必要があるクラスのソース コードにアクセスできない場合が多くあります。.Net フレームワークには、MembershipProvider などの多くの例があります。

于 2008-12-11T12:13:19.083 に答える
1

クラスがインターフェースを実装していない場合、またはモック フレームワークが部分的なモックを許可している場合は、クラスをモックできるようにする必要があります。前者の場合は、モックするインターフェースがないためです。後者では、モックアウトしたくないクラスから既存の動作を継承できます。

ただし、通常は、使用可能な場合は、クラスがインターフェイスに依存するようにします。その場合、インターフェースを実装するクラスをモックする必要はありません。テスト中のクラスに存在しないテスト内の依存関係を避けるために、インターフェイス自体をモックする必要があります。

于 2008-12-08T13:05:24.953 に答える