テストの課題

一緒に仕事をしてもらうパートナーさんの面談をする時に
大体私は簡単なJavaソースコードとテストクラスを書いてもらってます。*1


お題は1から100までの数値に対する「Fizz Buzz」で
標準出力に結果を出力する処理をテストクラスと一緒に書いて、というものです。
縛りはありませんが、実際のプロジェクトとして「単体テスト」をするならば、という仮定の下作ってもらっています。
ちょっとググれば答えも出てくるので実装クラスのロジックにはあまり興味がありません。
気にするのは、

  • テストクラスの中身
  • テスト対象メソッドのシグネチャ

ですね。正解は無いんですけど、これが結構興味深いのです。

  • 1メソッドの責務をどこまで負わせるか
  • 何をテスト対象にするか(テスト対象は出力内容か、ロジックか)

人によって全然違います。


「長年、当たり前のようにJUnit使ってきました」と
おっしゃる方でもソースコードを見ると「本当に?」と思うことがあります。
「仕様を満たす」ことだけを目的とするならばどんな書き方をしても「結果良ければ全てよし」ですが、
「テスト」に対してどこまで意識しているかを見るのに、この課題は結構面白いなぁ、と思います。
テストしやすいコードを書くことを意識しているか垣間見えるので。

*1:面談だけだとどうしても実装スキルが見えませんし、自分を上手に見せるスキルが高い人も経験上たくさんいらっしゃったので・・・