単体テストの最初の一歩を踏み出しましたが、カプセル化に問題があります。私のクラスには、クライアントに表示されるべきではないいくつかのプライベート メンバー変数がありますが、オブジェクトをテストしたい状態にするために、それらのプライベート変数を設定する必要があります。
次のようなコードがあるとします。
Class Foo {
public:
int action() ;
private:
int state ;
} ;
int Foo::action()
{
if(this->state == 1)
return 1 ;
else
return 0 ;
}
だから今私はテストしたいのですが、さまざまなシナリオで機能をチェックできるFoo::action()
ように設定できる必要があります。1 つの解決策は、テスト コード内Foo::state
の悪" "です。define private public
しかし、もっとエレガントなものはありますか?これはクライアントがアクセスしてはならない変数であることを強調しFoo::state
たいので、パブリック セッターを宣言したくありません。
編集:
テスト コードでテストしたいクラスを拡張し、その派生クラスにセッターを含めれば、プライベート変数を保護変数に変更すれば機能すると思います。しかし、これは「1 世代のみ」のソリューションであり、適切なアプローチというよりもハックのように感じられます。
編集2:
私が与えられた回答とコメントを読んだ後 (特に Lieven と ap. に感謝します) 私が今テストしようとしている実際のクラス (私が提供した単純な例ではありません) は単純にやりすぎで、私の問題に対する答えは動いていると思いますそのロジックの一部を、大物が使用する別のクラスに変換します。