テストを簡単にするためにコードを設計する必要がありますか?もしそうなら、テストしやすいようにC++コードを設計する方法。
- C ++で依存性注入をどのように適用しますか?
- 偽のテストオブジェクトの作成を簡素化するために、ベースとして純粋なインターフェイスクラスを使用してクラスを実装する必要がありますか?
- それは私にたくさんの仮想メソッドを作ることを強いるでしょう。それはパフォーマンスに影響しますか?
- C ++での妥当性を設計するとき、他に何を考えるべきですか?
テストを簡単にするためにコードを設計する必要がありますか?もしそうなら、テストしやすいようにC++コードを設計する方法。
偽のテスト オブジェクトの作成を簡素化するために、純粋なインターフェイス クラスをベースとして使用してクラスを実装する必要がありますか?
- それは私に多くの仮想メソッドを作ることを強いるでしょう。それはパフォーマンスに影響しますか?
私がよく使用する回避策は、クラスをインターフェイスの背後に隠すのではなく、テンプレート化することです。次に、テスト時にテスト/モック オブジェクトをテンプレート パラメーターとして渡し、それ以外の場合は実際のオブジェクトを渡すことができます。こうすることで、仮想関数のパフォーマンス ヒットを回避できます。
編集
OK、簡単な例:
OOP とインターフェースを使用すると、次のような関数を作成できます。
void Foo(IBar& someBar) { ... }
この関数は、インターフェイスを実装するパラメーターを受け取り、それを使用IBar
して何かを行います。ダミーのモック実装を渡したい場合は、単に から継承するモック オブジェクトを作成し、それをIBar
に渡しFoo
ます。シンプルでわかりやすい。
ただし、テンプレートを使用して同じことを実現できます。
template <typename BarType>
void Foo(BarType& someBar) { ... }
... 以上です。の本体はFoo
ほとんど変更できません。関数に渡された型が必要なすべてのメンバーを公開している限り、インターフェイス クラスから正式に継承する必要はなく、仮想関数やランタイム ポリモーフィズムのオーバーヘッドもありません。
最初から多くのことを設計してから、テストを作成し、それを通過させるのではなく、それ以上のことはしないでください。関数は非常に短くしてください。あなたがしたことを見て、それをリファクタリングしてください。コメントを書く場合は、問題のコードを適切な名前の別の関数に配置することをお勧めします。
そして、パターンを考えるのにあまり時間をかけないでください。それは多くの科学であり、結果はほとんどありません。最初にテストを書き、コードをシンプルに保つだけです。驚くべきことに、テストを書く必要はありません。それはもう。そして、あなたのコードは機能します。
一番の関心事は...