ベストプラクティス
プライベートな関数をテストする方法
他のファイルから呼び出すことのできないプライベートな関数(つまりc言語でいうとstatic関数)は一切テストする必要はありません。プライベートな関数をテストのためだけにパブリックに変更したり、何らかの小細工をしてテストコードから呼び出せるようにするのはアンチパターンです。
プライベートな関数はパブリックな関数の中で呼び出されます。そのためパブリックな関数に対してテストを書けばプライベートな関数も自ずと検証されることになります。もしプライベートな関数を直接呼び出してテストしたいと思うなら、外部から振る舞いが見えにくい構成になっている可能性が高いので構成を見直しましょう。もしくはふるまいや仕様ではなく実装の詳細をテストしようとしているのかもしれません。実装の詳細を検証するテストは壊れやすく、テストコードのメンテナンス性低下につながるので避けましょう。
TDDは必須?
必ずしもTDDで進める必要はないと思いますが、実装→テストコードよりもテストコード→実装の順のほうがテスト可能なインターフェースを保ちやすいと思います。
テストカバレッジ
カバレッジ100%を目指す必要はありません。カバレッジはプロダクトコードの内、テストで通過した行数を計算しただけのメトリクスです。
例えば、以下のテストコードは条件分岐の片方しか検証していません。
テストコード
TEST(getAbsSuite, 絶対値を計算できる) {
int x = 3;
int y = -2;
EXPECT_EQ(5, getAbs(x, y));
}