7

フェイク、スタブ、モック、動的モックの考え方に慣れてきました。しかし、部分モックをいつ使用するかについての理解には、まだ少し不安があります。

サービスのモックを計画していて、部分的なモックに頼る必要がある場合、それは設計が悪いことを示しているようです。部分的なモックは主にレガシー コードをテスト カバレッジの下に置くためのものなのでしょうか?

これとは逆に、Reset() メソッドを持つクラスをテストしているとします。別のテストで Reset() メソッドが機能することを既に確認しており、このメソッドの呼び出しで終了する必要があるクラスの機能がいくつかある場合、オブジェクトの部分的なモックを作成して実行するテスト設計は貧弱ですか? Reset() メソッドで Expectation を定義して、部分モックに対してテストします。

現在、この方法でいくつかのテストをセットアップしていますが、この種のことで後で問題が発生することはありますか?

4

4 に答える 4

2

その良いデザイン、私見。誰かがあなたの後を追ってきて、あなたのメソッドを変更し、Reset の呼び出しを削除するとどうなりますか? (ところで、なぜオブジェクトにこれほど多くの状態が含まれているのでしょうか?) 本番環境に到達するまで、それらが台無しになったことに気付かないかもしれません。それをモックしてそのメソッド呼び出しをアサートすることで、コードを維持している間、だれも台無しにしないことを保証できます。

于 2008-09-26T14:22:12.327 に答える
2

あなたの例では、メソッドが実装の詳細であるように聞こえResetますが、部分的なモックを使用すると、テストをクラスの実装に結合する危険があります。これにより、テストが必要以上に脆弱になります。

また、オブジェクトに実際の実装を持つメソッドとスタブ実装を持つメソッドがあると、テストがより混乱するようになると思います。後でテストに戻ったときに覚えておくべきことがもう 1 つあります。

Reset(a)状態ベースのテストを使用して、実際のメソッドが内部的に呼び出された後、オブジェクトの状態が期待どおりであることをアサートできますか。または (b) 対話ベースのテストを使用して、連携するオブジェクトへの関連する呼び出しが実際のResetメソッドの結果として行われたことを確認しますか?

Test Smell: mockobjects.com の具象クラスのモックが役に立つかもしれません。

于 2008-12-18T18:17:04.463 に答える
1

部分的なモックについての私の理解は、抽象クラスをモックするためのものであり、抽象メソッドのみがモックされ、既存の具象メソッドはそのままであるということでしたか?

于 2008-09-26T14:14:01.817 に答える
1

すべてのモックは、インターフェイスを完全に実装していないという点で「部分的」であると主張できます。非常に焦点を絞った機能をテストしようとしているので、テストしている機能を実行するために必要なサポート クラスの側面のみをモックする必要があります。

これにより、テストを他のテストから切り離すことができます。これは素晴らしいことです。

于 2008-09-26T14:36:48.843 に答える