DBUnitを使って、ユニットテストのテストデータを作成する
オイシックスの事例から学ぶ、JavaのWebアプリに自動テストを導入する方法 第4回
今回も本題に入る前に、ちょっとした弊社のエピソードを紹介させていただければと思います。オイシックスもJUnitを導入してから1年半くらいになりますが、テストケース数がもうすぐ5000を超えるくらいになってきました。ですが運用期間が長くなるにつれて、いろいろな問題が出てきました。
弊社ではテストのエビデンスとして、JUnitの結果とコードのカバレッジを提出するルールにしておりますが、開発者それぞれの環境でallTestをするようなこともあります。その時に環境によっては、マシンのスペックが悪くallTestにけっこう時間が掛かってしまうこと、またその影響でマシンの負荷が高くなり、他の作業を並行してやれず仕事にならないようなことがありました(注1)。その対応としてJenkinsにブランチのallTestが流せるジョブを作って対応しました。
あと、Jenkinsのバージョンはこまめに更新した方が良いなと実感しました。バージョンアップする前はビルド、AllTest、ページビューなどが結構遅くて、周りの人からも遅いという声があがっていました。改善として、サーバのスペックをすぐに上げることは無理そうだったので、jvmのチューニングをしたりしましたがさほど効果はなく、Jenkinsのバージョンを上げてみたら劇的に早くなるということがありました(実際Jenkinsのバージョンを調べたら、1年くらい前のものを使っていた)。
Jenkinsのコミュニティはかなり活発で、日々バージョンアップしているので、長い間バージョンアップしていない方は、こまめな更新をおすすめします(自戒も含め)。
それでは、前置きはこれくらいにして、今回はDBUnitについて(1)説明~(2)使い方~(3)弊社の事例という形でDBUnitについて紹介させていただこうと思います。よろしくお願いします。
補足ですが、弊社システム部には好きなPCを買っていい制度がありまして、すべてのマシンが低スペックというわけではありませんので、入社のご意思があるかたはご心配なく。私のPCはCore i7、メモリ16GB、SSDです。
対象読者
今回の対象読者は、下記のとおりです。
- 実際の開発プロジェクトへの自動テストの導入を検討されている方
- JavaによるWebアプリケーション開発についての知識がある方
- JUnitの基本的な知識がある方
必要な環境
- JDK 7
- Eclipse 4.3
- Tomcat 7
DBUnitとは
JUnit導入にあたり、テストデータの作成方法を検討すると思いますが、弊社では今回の記事で紹介するDBUnitを採用することにしました。DBUnitとは、簡単にいうと「CSV、XML、Excelなどで記述したテストデータをデータベースに登録、削除してくれるツール」です。他にもデータをエクスポートする機能や、テストケース実施後のデータが予想した値になっていることを検証する機能も提供されています。
なぜDBUnitを採用したのかというと、DBUnitはJUnitを拡張したフレームワークなので相性が良く、簡単なAPIなので導入も容易だったからです。また、視覚的に分かりやすいExcelファイルからインポートする機能も提供されているということもあり、このフレームワークを採用しました。DBUnitを使わなくても、テスト機で利用しているテストDBのデータを利用して、テストケースを作る方法も考えられるとは思いますが、この方法では、以下のような問題が起こります。
「開発者も含めて、多くの方がデータを変更するので、テストケースで使用しているデータの状態が変わってしまい、テストケースが失敗する」
当たり前ですが、上記のようなことが起こるので、弊社ではJUnit用のスキーマ+DBUnitという形で利用しています。
この記事は参考になりましたか?
- オイシックスの事例から学ぶ、JavaのWebアプリに自動テストを導入する方法連載記事一覧
-
- DBUnitを使って、ユニットテストのテストデータを作成する
- Javaのモックアップフレームワーク「mockito」でリクエスト/セッションを再現する
- オイシックスの独自フレームワークをモデルにしたサンプルWebアプリケーション
- この記事の著者
-
山田 昌平(オイシックス株式会社)(ヤマダ ショウヘイ)
オイシックスでは 運用→開発→開発推進を担当してきました。あと、ITイベントの協賛も担当しております。イベントは、技術的な面、エンジニアとしての考え方など、本当に学ぶことが多いのでおすすめです。お会いすることもあると思いますので気軽に声をお掛けください。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
