「実演テスト駆動開発」 WEB+DB PRESS Vol.35特集 特設ページ

テストフィルタ機能,受け入れテスト実行の自動化機能について

この記事を読むのに必要な時間:およそ 1 分

第8章完全版のコードには,誌面では掲載できなかったテストフィルタ機能,受け入れテスト実行の自動化機能を実装し,サーブレットコンテナもTomcatに変更しました。

テストフィルタ機能

受け入れテストと,ユニットテストなどの他の種類のテストとを同時に実行しないために,次の3つのクラスを導入しています(誌面25ページ参照⁠⁠ 。

jp.co.gihyo.webdb.vol35.tdd.webapp.AllFunctionalTests
ファイルシステムから受け入れテストのみを検索して実行する
jp.co.gihyo.webdb.vol35.tdd.webapp.AllUnitTests
ファイルシステムから受け入れテスト以外を検索して実行する
jp.co.gihyo.webdb.vol35.tdd.webapp.FindTestUtils
上記2クラスの共通部分を切り出したユーティリティクラス

テストの検索には命名規則を使用しています。受け入れテストの命名規則はFunctionalTest~,そのほかのテストの命名規則は~Testとしています。

また,テストフィルタ機能を使用するためにJUnit-Addonsライブラリを使用しています。そのため,Maven2のpom.xmlに以下の設定を追加しています。

<dependencies>
…
  <dependency>
    <groupId>junit-addons</groupId>
    <artifactId>junit-addons</artifactId>
    <version>1.4</version>
    <scope>test</scope>
  </dependency>
…
</dependencies>

テストの実行

AllFunctionalTestsを開いている状態でテストを実行すれば受け入れテストのみが実行され,AllUnitTestsを開いている状態でテストを実行すれば受け入れテスト以外(ユニットテストなどの他の種類のテストのみ)が実行されます。

受け入れテスト実行の自動化機能

データベースの初期化から,SQLの実行,サーブレットコンテナの立ち上げ,そして受け入れテスト(機能テスト)の実行までのすべてを自動化するための設定をMaven2のpom.xmlに記述しています(誌面48ページ参照⁠⁠ 。

次のコマンドで実行します。

mvn -Denv=it clean verify

サーブレットコンテナをTomcatに変更

受け入れテスト自動化に使用するサーブレットコンテナには,JettyではなくTomcatを使うように設定しました。そのため,受け入れテスト環境の立ち上げ(Tomcatの起動)にはCargoを使用しています。設定はMaven2のpom.xmlに記述しています。

なお,初回実行時にはTomcatを自動的にダウンロードしますので,少々時間がかかります。Cargoによってダウンロードされるファイルはデフォルトでは次のディレクトリにダウンロードされます。

C:\Documents and Settings\ユーザ名\Local Settings\Temp\cargo\installs

CargoがTomcatをダウンロードしている間はコンソールに何も出ないので,上記ディレクトリを確認してダウンロードが行われている途中であることを確認してください。