Item クラスに以下の createItemObj メソッドを追加します。
public static Item createItemObj(String name, String id, int price, int count) { return new Item(name, id, price, count); } |
・ファクトリメソッドとして登録できるのは、public static なメソッド (インナークラス内のメソッドを除く) です。それ以外のメソッドは登録できません。
3. ファクトリメソッドの登録
単体テストアシスタントがファクトリメソッドとして認識できるように登録します。
ソースコードペインで追加した Item#createItemObj メソッドを選択し、 をクリックします。
クリック後、Item#createItemObj の Javadoc に @jtest.factory が追加されます。
/** * @jtest.factory */ public static Item createItemObj(String name, String id, int price, int count) { return new Item(name, id, price, count); } |
※手入力で Javadoc に @jtest.factory タグを追加した場合でもファクトリメソッドとして登録されます。
※ファクトリメソッドを解除するには をクリックします。
※登録されているファクトリメソッドはファクトリメソッドビューに表示されます。
4. ファクトリメソッドを使用したテストメソッド作成
ソースコードペインで Cart#addItem メソッドを選択し、 をクリックします。
起動する画面で以下の設定になっていることを確認します。※赤字が設定する値となります
- テストケースの追加:通常
- 初期化モード:浅く
- テストケースを作成するメソッド:addItem(Item)
[OK] ボタンを押下します。
5. テストメソッド確認
作成されたテストメソッドを確認します。(テストメソッド名は連番で付けられるため本チュートリアルの実施順によって異なります。)
@Test public void testAddItem() throws Throwable { | |
// Given Cart underTest = new Cart(); | |
// When | ファクトリメソッドの引数を設定するための変数宣言 |
Item item = Item.createItemObj(name, id, price, count); | ファクトリメソッドの呼び出しによるテスト用オブジェクトの初期化 |
underTest.addItem(item); } |
ファクトリメソッドの引数をテスト内容に合わせ設定後、テストを実行します。
6. カバレッジを向上するテストの実施
ここでは単体テストアシスタントを利用してテスト対象のメソッドに対して、カバレッジが計測されていないコードを検出してテストケースを追加する方法を確認します。
・機能を有効化
本章で使用する機能を有効化します。
1.メニューの [Parasoft] > [設定] を選択して設定ダイアログを開きます。
2.[Parasoft] > [単体テスト アシスタント] を選択します。
3.[推奨] で “カバーされていないコード” チェックボックスを有効化します。(デフォルトでは無効化されています。)
・テストメソッド作成
Util#checkUserData メソッドをテストするメソッドを作成します。
1.ソースコードペインで Util#checkUserData メソッドを選択します。
2.単体テストアシスタントビューで をクリックします。
3.テストメソッドテンプレートが UTA プロジェクトの tests フォルダ内に作成されます。
4.作成されたテストメソッドテンプレートの内容を確認します。(テストメソッド名は連番で付けられるため本チュートリアルの実施順によって異なります。)
@Test | |
public void testCheckUserData () throws Exception { | …テストメソッド |
// Given | |
Cart underTest = new Util(); | …テストインスタンスの生成 |
// When | |
User user = null; // UTA: デフォルト値 | …checkUserDataメソッドの引数 |
boolean result= underTest.checkUserData(user); | …checkUserDataメソッドの呼び出し |
// Then | |
// assertFalse(result); | …checkUserDataの戻り値をチェックするアサーションテンプレート |
} |
5.checkUserData(User) メソッドの引数を入力します。次のコードを変更します。
変更前 | 変更後 | |
User user = null; | ► | User user = new User(); user.setName("name"); |
6.アサーションのコメントアウト外し、コードを有効化します。
変更前 | 変更後 | |
// assertFalse(result); | ► | assertFalse(result); |
7.変更後のファイルを保存し、プロジェクトのビルドが正常に行われることを確認します。
・テスト実行と結果確認
作成したテストメソッドを実行します。
1.ソースコードペインでUtilTest#testCheckUserData メソッドを選択し、単体テストアシスタントビューで をクリックします。
2.実行後、推奨ビューに以下の推奨事項が表示されます。
テストメソッドの実行により、テスト対象 Util#checkUserData メソッドにカバーされていないコードがあることが指摘されました。
計測したカバレッジ (33%) :
ラインの色はそれぞれ以下のことを意味しています。
緑色 | 実行された行 |
赤色 | 実行されなかった行 |
今回作成したテストメソッドは Util#getUserId メソッドの戻り値が null となるテストデータであり、47 行目で return文が実行されそれ以降の行は実行されていないことがわかります。
・テストメソッド追加
推奨ビューを使用してテストメソッドを追加します。
1.推奨事項ビューの をクリックして UtilTest#testCheckUserData テストメソッドを複製します。
2.生成されたテストメソッド (UtilTest#testCheckUserData2 メソッド) を変更します。
(テストメソッド名は連番で付けられるため本チュートリアルの実施順によって異なります。)
変更前 | 変更後 | |
User user = new User(); user.setName("name"); | ► | User user = new User(); |
3.変更後のファイルを保存し、プロジェクトのビルドが正常に行われることを確認します。
4.単体テストアシスタントビューの で作成した2つのテストメソッドを実行します。
5.実行後カバレッジを確認します。
計測したカバレッジ(58%) :
6.推奨事項ビューを確認します。
同様の指摘が表示されている事が確認できます。テストメソッド追加の手順を繰り返し、すべてのコードをカバーすると、この指摘は表示されなくなります。
・パラメータライズされたテストの実施
ここでは単体テストアシスタントを利用してテスト対象のメソッドに対して、複数パターンの入力値を一回の実行で検証するためパラメータライズドされたテストメソッドの作成から実行までを確認します。
・ライブラリ選択
単体テストアシスタントが作成するパラメータライズドされたテストメソッドの生成には以下のいずれかのライブラリを利用します。
①JUnitParams
②Junit4Parameterized
本チュートリアルでは “①JUnitParams” を利用します。以下の手順でライブラリが正しく選択されていることを確認してください。
1.メニューの [Parasoft] > [設定] を選択して設定ダイアログを開きます。
2.[Parasoft] > [単体テスト アシスタント] を選択します。
3.パラメータライズされたテストタイプ でJUnitParams (CSV データ入力に必要) を選択します。
※この先の手順で行う CSV ファイルベースのテストケースの生成は JUnitParams だけでサポートしており、Junit4Parameterized を選択している場合はご利用いただけませんのでご注意ください。