9.8 データベースアクセスをともなう実装のテスト

データベースアクセスをともなう実装をテストする方法には、いくつかの選択肢があります。特にモックを使うか、本物のデータベースを使うかについては悩むところです。プロジェクトやプロダクトの方針によっても異なるため、まずはすでにある方針をベースに検討することになります。ゼロベースでデータベースのテストの方法を検討できる状況では、本物に近いデータベースを使ってテストするのがおすすめです。テスト自体の書き方は「13章  テスト 」で詳しく紹介します。

9.8.1 本物のデータベースを使ったテスト

現在では、ローカルのDockerを使うことで簡単にデータベースのコンテナを起動できます。モックを使うとユニットテスト自体はしやすくなるかもしれません。ただし、モックと本物のデータベースではふるまいが異なる可能性があり、モックを使ったテストはパスしたけれど、いざテスト環境でシステムテストを実施したら想定通りに動かなかった、ということもあり得ます。

またモックを使う場合、モックとしてふるまう挙動をテストコードとして記述するため、テストコードの分量が増加します。将来にわたるテストコードの保守性などにも影響があるでしょう。特にリファクタリングが大変です。データベースにアクセスする関数のシグネチャを更新した場合などは、もれなくモック側の修正も必要になり、変更に対して何を担保しているかわかりにくくなります。できる限りローカルに起動した本物のデータベースをテストに用いることをおすすめします。

さて、以下のようなデータベースにアクセスして、ユーザーIDからユーザーを取得するような処理のテストを考えてみます。

リスト9-14: データベースからユーザーを取得 ...