11

テストを簡単にするためにコードを設計する必要がありますか?もしそうなら、テストしやすいようにC++コードを設計する方法。

  • C ++で依存性注入をどのように適用しますか?
  • 偽のテストオブジェクトの作成を簡素化するために、ベースとして純粋なインターフェイスクラスを使用してクラスを実装する必要がありますか?
    • それは私にたくさんの仮想メソッドを作ることを強いるでしょう。それはパフォーマンスに影響しますか?
  • C ++での妥当性を設計するとき、他に何を考えるべきですか?
4

4 に答える 4

9

偽のテスト オブジェクトの作成を簡素化するために、純粋なインターフェイス クラスをベースとして使用してクラスを実装する必要がありますか?

  • それは私に多くの仮想メソッドを作ることを強いるでしょう。それはパフォーマンスに影響しますか?

私がよく使用する回避策は、クラスをインターフェイスの背後に隠すのではなく、テンプレート化することです。次に、テスト時にテスト/モック オブジェクトをテンプレート パラメーターとして渡し、それ以外の場合は実際のオブジェクトを渡すことができます。こうすることで、仮想関数のパフォーマンス ヒットを回避できます。

編集
OK、簡単な例:

OOP とインターフェースを使用すると、次のような関数を作成できます。

void Foo(IBar& someBar) { ... }

この関数は、インターフェイスを実装するパラメーターを受け取り、それを使用IBarして何かを行います。ダミーのモック実装を渡したい場合は、単に から継承するモック オブジェクトを作成し、それをIBarに渡しFooます。シンプルでわかりやすい。

ただし、テンプレートを使用して同じことを実現できます。

template <typename BarType>
void Foo(BarType& someBar) { ... }

... 以上です。の本体はFooほとんど変更できません。関数に渡された型が必要なすべてのメンバーを公開している限り、インターフェイス クラスから正式に継承する必要はなく、仮想関数やランタイム ポリモーフィズムのオーバーヘッドもありません。

于 2009-11-05T15:04:01.497 に答える
5

最初から多くのことを設計してから、テストを作成し、それを通過させるのではなく、それ以上のことはしないでください。関数は非常に短くしてください。あなたがしたことを見て、それをリファクタリングしてください。コメントを書く場合は、問題のコードを適切な名前の別の関数に配置することをお勧めします。

そして、パターンを考えるのにあまり時間をかけないでください。それは多くの科学であり、結果はほとんどありません。最初にテストを書き、コードをシンプルに保つだけです。驚くべきことに、テストを書く必要はありません。それはもう。そして、あなたのコードは機能します。

于 2009-11-05T17:09:11.367 に答える
3

最大の凝集力と最小のカップリング

これにより、テストでの生活が楽になります。

于 2009-11-05T14:47:49.093 に答える
0

一番の関心事は...

  1. 機能の実現
  2. コードの拡張性
  3. コードの再信頼性
  4. コードの保守性
于 2009-11-05T15:04:56.953 に答える