• HOME
  • Javaの単体テストを効率的に実施するJtestの「単体テストアシスタント」

Javaの単体テストを効率的に実施するJtestの「単体テストアシスタント」

単体テストは、ソフトウェアの品質を確保する上で、とても優れたテストです。
メソッド単位のテストで品質の低下やバグの再発を防止することができます。また、JUnitなどの広く使われているテスティングフレームワークを用いて効率的にテストコードを作成することができ、テストコード自体がエビデンスとなります。
Jtestの単体テストアシスタントでは、EclipseやIntelliJ IDEA上のJUnitを用いた単体テストを効率化するための機能が盛り込まれています。単体テストに慣れていない開発者でもすぐに単体テストを始めることができます。

本ページより、以下をダウンロードいただけます。
  • Jtest体験版、チュートリアル、チュートリアル用プロジェクト
  • 単体テストコードを作成する際に、単体テストアシスタントを利用した場合と、していない場合の作業工数の比較資料

単体テストの導入や運用の障壁

単体テスト(ユニットテストと呼ばれることもあります)は、プログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。通常、メソッドが単体テストの単位(ユニット)となります。 プログラムが全体として正しく動作しているかを検証する結合テストは、開発の比較的後の段階でQAチームなどによって行なわれることが多いのとは対照的に、単体テストは、コード作成時などの早い段階で開発者によって実施されることが多いのが特徴です。

Javaの開発では多くのプロジェクトでオープンソースのテスティングフレームワーク「JUnit」が使われています。テスティングフレームワークを使った単体テストのメリットは、テストコードを一度作成することで同じ条件のテストを繰り返し実行でき、結果の確認を自動で行えることです。

「品質をもっと上げたい」「開発⼯数を減らしたい」といった期待を持ち、多くの開発者は単体テストや単体テストの⾃動化に取り組みます。しかし実際に導⼊し、運⽤してみると、「予想以上に工数がかかっているのに、思ったほど効果がでない」または「運⽤しているが⾮常に苦労している、ちっとも楽にならない」といったことに陥りがちです。

単体テストの導入や運用において、障壁となるのは以下の点です。
  • 単体テストの導入により工数が増大する
    • 実装コストや学習コストがかかる
  • 単体テストのメンテナンスコストが増大した
    • テストコードが複雑になり追加実装が難しい、修正に時間がかかる
  • ソースコードカバレッジの罠にハマった
    • カバレッジ100%が求められるが達成にはかなりの手間がかかる
    • カバレッジ100%を達成してもバグが減らない
Jtestの単体テストアシスタントは、これらの障壁を取り除き、効率的な単体テストの導入や運用を支援します。

単体テストアシスタントによる支援

単体テストアシスタントでは、さまざまな単体テストの支援を行います。
Jtest 10.4.0からは、Springフレームワーク(Spring MVC、Spring Boot)がサポートされ、Springフレームワークを考慮したテストテンプレートの作成やモック化が行えるようになりました。

テンプレートの作成

JUnitのテストメソッドのテンプレートやアサーションの作成を支援し、複数の引数をテストする際にCSVファイルなどに記載されたテストデータを用いることができます。

モック化

テスト対象メソッドの呼び出しに必要なクラスオブジェクトをモックとして作成します。モック化したオブジェクトが必要とするクラスオブジェクトも「深いモック」によりモックを作成することができます。

カバレッジの計測

JUnitのカバレッジ計測だけではなく、テストでカバーされていないコードをJtestが検知し、カバレッジ計測率を向上させるためのヒントを提示します。

単体テストの追跡や監視

モックの利用を推奨するテストコードの実装やアサートの有無のチェックなど、単体テスト実行時の振る舞いを監視し、改善を促します。

単体テストアシスタントの詳細

Jtestの単体テストアシスタントは、Eclipse および IntelliJ IDEAのプラグインとして動作します。Jtestのプラグインを開発環境(IDE) へ適用すると、すぐに単体テストアシスタントをお使いいただけます。

eclipseにJtestをプラグインし、単体テストアシスタントを利用

テンプレートの作成

テストテンプレートの作成

Jtestの単体テストアシスタントでは、メソッドやクラスの単位でJUnitのテストメソッドのテンプレートを作成します。また、テスト対象メソッドの呼び出しやパラメータの定義を自動的にテストメソッド内に記述しますので、開発者はパラメータやテストの期待値を記述するのみで単体テストを実施することができるようになります。

JUnitテストテンプレートの作成例

上記は、Simpleクラスのmapメソッドのテストを作成する例です。開発者はJtestが作成したJUnitテンプレート上のパラメータと期待値を設定するのみで単体テストを実行できます。

引数のパターンを複数指定したテストを行う際は、テストクラス・メソッドを作成するときにパラメータライズを選択することで、複数のパラメータをリストで指定できるようになります。また、この際にCSVファイルなどを指定して、複数の引数を指定することができます。

パラメータライズのJUnitテストテンプレートの作成例

アサーションの作成

Jtestは、テストの結果を判断するためのアサーションおよびテンプレートの作成を支援します。また、テスト対象クラスの状態が変わった場合にテスト対象クラスを検証するためのアサーションのテンプレートを作成することも可能です。テストの期待値を調べる必要はなく、現在の動作した結果をテストの期待値として設定することで、単体テストの作成を効率化します。

JUnitテストコードを実行した際の結果(result=-1)をテストの期待値として設定

モック化

単体テストを行ううえで、複雑で手間がかかるのは、主にテスト対象のユニットを分離する作業です。Jtestは、テスト対象メソッドの呼び出しに必要なクラスオブジェクトをMockitoやPowerMockを使って、依存関係をモック化します。これにより、例えばデータベースにアクセスするオブジェクトを含む単体テストを簡単に作成できるようになります。

技術資料として公開している単体テストにおける工数削減のデータでは、このモック機能が最も単体テストの工数削減に寄与したという結果が出ています。

Jtestによる依存するサービスやさらに依存するサービスのモック化

カバレッジの計測

単体テストアシスタントでは、テスト対象のメソッドに対して、一定以上のカバレッジが計測されていないコードを検出し、カバレッジを向上させるためのヒントを提示します。カバレッジ計測の目視でのテストの抜け漏れの確認だけではなく、追加すべきテストパターンを具体的に提示することで、効率的にカバレッジを向上させることができます。

計測したカバレッジ。コード行の表示の左に、テストで実行された行が緑、実行されなかった行が赤で表示されます。

カバレッジ計測の結果から、カバレッジを向上させるためのヒントを表示

単体テストの追跡や監視

JtestはJUnitの単体テスト実行時に、さまざまなデータを収集します。
処理の経路やテストメソッド内の変数の値、モックの呼び出し、例外の有無を監視することで、テストを実行した際の振る舞いを確認できるため、テストの実装スピードの向上やテストが正しく実行できていることを確認するために役に立ちます。

Eclipse上のテストの処理の流れと実行時の値の監視

テスト実行時にモック化が可能な箇所を検知

単体テストアシスタントの動画

単体テストアシスタントの操作動画です。
※ 動画中のJtestは10.3.1となります。
※ 全画面および最高画質での視聴を推奨します。また、日本語の字幕にて解説を入れております。字幕ONにてご視聴ください。


テストテンプレートの作成



アサーションの作成



モックの作成



技術資料および体験版

体験版

  • ご利用になれる期間は14日間です。
  • 本ページでご紹介した単体テストアシスタント機能やカバレッジ計測機能を無償でご利用いただけます。
  • 単体テストアシスタント機能をお試しいただくための、サンプルプロジェクトやチュートリアルも含まれています。
  • ご評価を円滑に進めるための技術的なお問い合わせも受け付けております。
  • 静的解析のチュートリアルは含まれません。静的解析のご評価をご希望の方はライセンス請求時にお申し付けください。

技術資料

以下の技術資料をご提供しております。
  • 単体テストコードの作成における工数削減の実測データ
    単体テストコードを作成する際に、単体テストアシスタントを利用した場合と利用しない場合の作成工数を計測し、単体テストアシスタントによる工数削減の効果をまとめた資料です。

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。