JUnit 単体テスト アシスタント
メソッド単位のテストで品質の低下やバグの再発を防止することができます。また、JUnitなどの広く使われているテスティングフレームワークを用いて効率的にテストコードを作成することができ、テストコード自体がエビデンスとなります。
しかし、思ったほど効果が出ない、運用に苦労しているといった課題はないでしょうか?
Jtestの単体テストアシスタントはJUnitを用いた単体テストを効率化する機能によってこれらの課題を解決します。単体テストに課題を持っている方だけでなく、JUnitに慣れていない開発者でもすぐに効率的な単体テストを始めることができます。
単体テストの導入や運用の障壁
単体テスト(ユニットテストと呼ばれることもあります)は、プログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。通常、メソッドが単体テストの単位(ユニット)となります。 プログラムが全体として正しく動作しているかを検証する結合テストは、開発の比較的後の段階でQAチームなどによって行なわれることが多いのとは対照的に、単体テストは、コード作成時などの早い段階で開発者によって実施されることが多いのが特徴です。Javaの開発では多くのプロジェクトでオープンソースのテスティングフレームワーク「JUnit」が使われています。テスティングフレームワークを使った単体テストのメリットは、テストコードを一度作成することで同じ条件のテストを繰り返し実行でき、結果の確認を自動で行えることです。
「品質をもっと上げたい」「開発⼯数を減らしたい」といった期待を持ち、多くの開発者は単体テストや単体テストの⾃動化に取り組みます。しかし実際に導⼊し、運⽤してみると、「予想以上に工数がかかっているのに、思ったほど効果がでない」または「運⽤しているが⾮常に苦労している、ちっとも楽にならない」といったことに陥りがちです。
単体テストの導入や運用において、障壁となるのは以下の点です。
- 単体テストの導入により工数が増大する
- 実装コストや学習コストがかかる
- 単体テストのメンテナンスコストが増大した
- テストコードが複雑になり追加実装が難しい、修正に時間がかかる
- ソースコードカバレッジの罠にハマった
- カバレッジ100%が求められるが達成にはかなりの手間がかかる
- カバレッジ100%を達成してもバグが減らない
単体テストアシスタントによる支援
単体テストアシスタントはテストケーステンプレートの作成やモック化の支援、単体テスト実行時の変数の追跡など単体テストを効率的に行う様々な機能が使えます。Springフレームワーク(Spring MVC、Spring Boot)をサポートしているため、Springフレームワーク独自のテストケーステンプレートやモックの作成支援を行えます。
テンプレートの作成
JUnitのテストメソッドのテンプレートやアサーションの作成を支援し、複数の引数をテストする際にCSVファイルなどに記載されたテストデータを用いることができます。
モック化
テスト対象メソッドの呼び出しに必要なクラスオブジェクトをモックとして作成します。モック化したオブジェクトが必要とするクラスオブジェクトも「深いモック」によりモックを作成することができます。
カバレッジの計測
JUnitのカバレッジ計測だけではなく、テストでカバーされていないコードをJtestが検知し、カバレッジ計測率を向上させるためのヒントを提示します。
単体テストの追跡や監視
モックの利用を推奨するテストコードの実装やアサートの有無のチェックなど、単体テスト実行時の振る舞いを監視し、改善を促します。
未カバー行をカバーするテストテンプレート作成
未カバー行(実行されなかった行)に対して、その行を実行するために必要なテストケースを自動生成したり、テストテンプレート作成に役立つヒントを提供します。
Spring単体テストテンプレートの作成
Springの単体テストに必要な定形コードやSpringの提供するモックを使った単体テストケーステンプレートを作成します。
- Jtest体験版、チュートリアル、チュートリアル用プロジェクト
- 単体テストコードを作成する際に、単体テストアシスタントを利用した場合と、していない場合の作業工数の比較資料
詳しくはこちらをご覧ください。
単体テストアシスタントの詳細
Jtestの単体テストアシスタントは、Eclipse および IntelliJ IDEAのプラグインとして動作します。Jtestのプラグインを開発環境(IDE)へ適用すると、すぐに単体テストアシスタントをお使いいただけます。テンプレートの作成
テストテンプレートの作成
Jtestの単体テストアシスタントでは、メソッドやクラスの単位でJUnitのテストメソッドのテンプレートを作成します。また、テスト対象メソッドの呼び出しやパラメータの定義を自動的にテストメソッド内に記述しますので、開発者はパラメータやテストの期待値を記述するのみで単体テストを実施することができるようになります。引数のパターンを複数指定したテストを行う際は、テストクラス・メソッドを作成するときにパラメータライズを選択することで、複数のパラメータをリストで指定できるようになります。また、この際にCSVファイルなどを指定して、複数の引数を指定することができます。
アサーションの作成
Jtestは、テストの結果を判断するためのアサーションおよびテンプレートの作成を支援します。また、テスト対象クラスの状態が変わった場合にテスト対象クラスを検証するためのアサーションのテンプレートを作成することも可能です。テストの期待値を調べる必要はなく、現在の動作した結果をテストの期待値として設定することで、単体テストの作成を効率化します。モック化
単体テストを行ううえで、複雑で手間がかかるのは、主にテスト対象のユニットを分離する作業です。Jtestは、テスト対象メソッドの呼び出しに必要なクラスオブジェクトをMockitoやPowerMockを使って、依存関係をモック化します。これにより、例えばデータベースにアクセスするオブジェクトを含む単体テストを簡単に作成できるようになります。技術資料として公開している単体テストにおける工数削減のデータでは、このモック機能が最も単体テストの工数削減に寄与したという結果が出ています。
カバレッジの計測
単体テストアシスタントでは、テスト対象のメソッドに対して、一定以上のカバレッジが計測されていないコードを検出し、カバレッジを向上させるためのヒントを提示します。カバレッジ計測の目視でのテストの抜け漏れの確認だけではなく、追加すべきテストパターンを具体的に提示することで、効率的にカバレッジを向上させることができます。単体テストの追跡や監視
JtestはJUnitの単体テスト実行時に、さまざまなデータを収集します。処理の経路やテストメソッド内の変数の値、モックの呼び出し、例外の有無を監視することで、テストを実行した際の振る舞いを確認できるため、テストの実装スピードの向上やテストが正しく実行できていることを確認するために役に立ちます。
未カバー行をカバーずるテストテンプレート作成
単体テストの実行時に処理が実施されなかった未カバー行(実施されなかった行)に対して、テスト対象のソースコードを分析し、その行を実行するために必要なテストケースを自動生成したり、自動生成できなかった場合、カバーするためのヒントをコメントで作成することが可能です。Spring単体テストテンプレートの作成
Springフレームワークはアプリケーションの構築だけでなく、単体テストのためのフレームワークやモックオブジェクトも提供しているため、フレームワークの仕組みに沿った単体テストの実施が可能です。しかし、テストケースを適切にセットアップするには単純なテストでも多くの手作業による決まりきったコーディングが必要です。
- テスト対象のControllerとControllerが依存するTodoServiceを使用してSpringコンテナーを設定する。
- findAllハンドラーメソッドに有効なリクエストを送信する。
- 戻り値 ”todo/list”などのレスポンスを検証する。
単体テストアシスタントの動画
単体テストアシスタントの操作動画です。※ 動画中のJtestは10.3.1となります。
※ 全画面および最高画質での視聴を推奨します。また、日本語の字幕にて解説を入れております。字幕ONにてご視聴ください。
テストテンプレートの作成
アサーションの作成
モックの作成
PICK UP
イベント・セミナー
ニュース・キャンペーン
Java対応静的解析・単体テストツール Jtestに
関するお問い合わせ
テクマトリックス株式会社
東京本社ソフトウェアエンジニアリング事業部
03-4405-7853
- メールでのお問い合わせ
- parasoft-info@techmatrix.co.jp