前提・実現したいこと
最近CppUTestでテストコードを書き始めたのですが、C++11で実装済みのクラスを検証するためのテストコードを書く中で、classのprivateメンバのテストコードをきれいに実装する方法が見つからず悩んでいます。
現在は、後述の「試したことの4.」に書いたstaticな非メンバ関数で実装しなおす方針で進めていますが、このままだとprivateメンバ変数も参照したくなる予感もしており、このまま進めてよいのか悩んでいます。
classのprivateメンバのテストは、どう実現するのが良いのでしょうか?皆様はどのように対応してますか?
- 後述の「試したことの2.~4.」のいずれかを採用している
- 別のもっと良いテストコードの実装方法を使っている
- 評価しにくいclassの設計・実装が悪い
- そもそもclassの内部処理を評価しようとすること自体が悪い
- CppUTest以外のツールを使えば解決する
- その他
該当のソースコード
c++
1class Hoge{ 2public: 3 Hoge() : hoge_(0){} 4 int update(){ 5 // 前処理やって 6 return updateHoge(); 7 } 8 9private: 10 int updateHoge(){/*テストしたい複雑な処理部*/} 11 int hoge_; 12};
試したこと
- 参考書として**"テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で学ぶアジャイルな設計"**を読んでいるのですが、すっきりする解決方法がわかりませんでした。
- private:をPRIVATE:に置き換えて、CppUTestビルド時のみ#define PRIVATE publicにする。
→ 既存コードに手を入れる必要があり、なんとなく不格好になったため不採用
0. GoogleTestのようにテストモジュールをclass Hogeのfirendに追加する方法をCppUTestで実現する。
→ 既存コードに手を入れますがfirend追加だけなので1よりマシと考えましたが、CppUTestでの実装方法がわからず断念
0. 評価したいprivateメンバ関数をstaticな非メンバ関数(例:static void Hoge_updateHoge(int&))にし、コール側で必要なメンバ変数を引数で渡すよう実装しなおす。
→ 今はこれで進めてますが、メンバ変数はどうするのか?もっとスマートな方法があるのでは?とモヤモヤしています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/01 13:42
2021/03/06 07:58