読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

単体テストはDIよりモックがいい

単体テストをするためにDIを使うのはどうも昔から抵抗があります。そういう記事を昔書いた気もする。

改めて説明すると、プログラムがいびつになります。また余分なコードが多くなります。よくあるパターンは、ロジックはServiceのようなクラスを作りデータアクセスはDaoクラスを作りそれぞれDIして単体テスト時にモックに差し替えられるようにするというものです。こうするとDIするためにいろんなものをインスタンス変数にしないといけなくなります。そのクラスが表すモノが知っている情報と無関係にserviceやらdaoやら内部処理に必要なオブジェクトがインスタンス変数になります。またインスタンス変数のない処理だけのメソッドはstaticメソッドのほうが自然ですがインスタンスが必要になってしまいます。またこれら全部インターフェースを定義しないといけなくなりコード量が増えます。変更時も面倒です。

単体テストのためにプログラムの設計を歪めるのは本末転倒感があります。できる限り普通にプログラムを書いてそれを単体テストできるようにすべきです。

mockitoを使い倒せばDIのような作りにしなくても結構モックに差し替えができます。今はそういうやり方のほうが適しているように思います。