私たちのプロジェクトでは、Google Mockを使用していますが、複数の場所では、クラスが「モック可能」であることを確認するためにのみ、プロダクションコードを作成しています。私たちはGoogle Mockのメリットを欲しがるため、これを行いますが、反対側ではより最適な生産コードを使用したいと考えています。次のようなケースは、私たちが頻繁にやることであり、取り除きたいものです。Google Mockでポインタを避けるには?
class A{
public:
void doSomething(); //Does something with _someB
void setSomeB(B* mockedB); //This is only here for GMock
private:
B* _someB; //This should not be a pointer, it is a pointer only for GMock
}
これは、わかりましたが、私は詳細を省略しただけです。基本的には、Bがポインタであることを取り除きたい。ポインターとして持っている理由は、テストコードでBをサブクラス化して(模擬して)、そのセッターで設定できるからです。
これを避ける方法はありますか?私たちはクラス内でスコープをBにすることはできませんか?あなたが本当に_someB
がポインタとして保持したくない場合は、オプションはプリプロセッサコマンドでその宣言をラップすることです
おかげ
スマートポインタを使用してください。 –
@TonyTheLionは、オブジェクトをスタック上に生き残らせることはまだありません。それはまだポインタであり、私はまだセッターが必要です。 –
Googleの依存関係注入のファン。テストフレームワークを使用せずにテストフレームワークを使用するのは難しいことです。 YouTubeのビデオシリーズ「The Clean Code Talks」をチェックすることを強くお勧めします。 http://youtu.be/wEhu57pih5w – cgmb