最近単体テストの重要さを思うところがあり、単体テストの考え方/使い方 を読みなおしている。というか正確にははじめてじっくり読んでいる。

こういう本って漠然とよんでも血肉にならず、自分の中に明確な課題感があってそれが本の記述の中にささるものがあったときに、「ああ、こういうことだったのか!」と腑に落ちるということがある。いまこの本を読んでそういう体験をしている。

その中で、テスト対象のコードは「システムの観察可能な振る舞いの一部でなかればならない」という記述があった。それは次に挙げるもののどちらかであるという。

  1. クライアントが目標を達成するために使う公開された操作
  2. クライアントが目標を達成するために使う公開された状態

ここでいうクライアントとは私の理解では呼び出し元のことだ。

1はcommandに相当し、2はqueryに相当する。そのことも本書内にも記述がある。

そして次が大事だが、これら2つに該当しないコードが実装の詳細(implementation detail)なので、テストの対象としてはならない。

テストコードを書いたりレビューしたりしていると、「何をテストするのか/するべきか」が自分の中で言語化できずになんとなく判断していることがあった。こういう言語化に出会うと、一歩進んだ具体性をもってテストに向きあえる気がする。