質問: ユニットテストに関する二つの質問があります。 質問1.publicメソッドをテストする意味がありますか?(Utility系を除く) 下記の例では、aとbをそれぞれちゃんとテストすればいいでしょうないでしょうか? bはaの実施結果による影響があればまだいいですが、無関係であれば、テストケースが分かりにくいだと思います。 public void main() { a(); b(); } private void a() {省略...} private void b() {省略...} 質問2.普通のSI開発では、100%のcoverageが必要ですか?例えば、画面Service→機能Service→Daoという一連の処理では、簡単な機能Serviceなら、画面Serviceからの引数をDaoに引き渡して、Daoの戻り値を画面Serviceに返すという任務だけです。この場合はどうせmockを利用するので、わざわざunitテストが必要ですか?
回答: 解答1 main() をテストする意味があるか、という意味だと考えますが、答えは「必要」です。 なぜなら、「aが動いてbが動いた」ことをテストしなければならないからです。 ※下の coverage にも影響しますが、「通る可能性のあるルートは全部試す」のです 解答2 ユニットテストであれば 100% が必要でしょう。ユニットテストとは基本的に「考えられるすべてのルートを通して、その動きが仕様通りであることを確かめる」ためのものです。 例に挙げられた機能 service ですと、 * 画面からの引数が想定外だった時にどういう挙動をするか?(挙動未定義なら設計が誤りなわけですが) * Dao 呼び出しに失敗した場合にどういう挙動をするか(それこそ mock でDaoを壊して試します) * Dao が戻り値を返さなかった場合どうするか * Dao の戻り値が想定外(想定範囲を逸脱した値が返る等)の場合どうするか といった点を、ユニットテストで潰す必要があるでしょう。