2011-04-17 C++の単体テストについて最近考えてること 日記 C++ レガシーコードに対していかに自動テストするか 結論から言うと、無理なものは無理! virtualな関数ならモック作ってよしなにできるんだけど、そんな設計になってるはずがない Javaの場合はC++でいうvirtual修飾子がデフォルトで付いているから、オーバーライドしたメソッドが自動的に呼ばれるが、 C++はvirtualが付いてないと型の通りのやつが呼ばれてしまう→モック化できない テスト用にヘッダを別にするといいんじゃないかと考えたが、ソースコードの二重管理になってしまう危険がある でも、ここみたいにテスト時のみvirtualをつける設計にするといいなあと思った privateなクラス関数はテストするべきか? テストクラスをフレンドクラスにしてもらうか、#define private publicという荒業を使うか…? テストはインターフェイスにのみ行われるべきだと思う コードカバレッジを考えたいならその設計を考え直してくれ!! C++でリフレクションやろうと思えばできるけど、そんなの使うような設計にするのが悪い ところでgoogle testとgoogle mock超便利 今度何か書きたい OMakeと組み合わせると結構楽しい