C++の単体テストについて最近考えてること

レガシーコードに対していかに自動テストするか

結論から言うと、無理なものは無理!

virtualな関数ならモック作ってよしなにできるんだけど、そんな設計になってるはずがない

Javaの場合はC++でいうvirtual修飾子がデフォルトで付いているから、オーバーライドしたメソッドが自動的に呼ばれるが、
C++はvirtualが付いてないと型の通りのやつが呼ばれてしまう→モック化できない

テスト用にヘッダを別にするといいんじゃないかと考えたが、ソースコードの二重管理になってしまう危険がある

でも、ここみたいにテスト時のみvirtualをつける設計にするといいなあと思った

privateなクラス関数はテストするべきか?

テストクラスをフレンドクラスにしてもらうか、#define private publicという荒業を使うか…?

テストはインターフェイスにのみ行われるべきだと思う

コードカバレッジを考えたいならその設計を考え直してくれ!!
C++でリフレクションやろうと思えばできるけど、そんなの使うような設計にするのが悪い

ところでgoogle testとgoogle mock超便利

今度何か書きたい
OMakeと組み合わせると結構楽しい