単体テストアシスタントで作成するテストメソッドはテストの実行に必要となるテストデータに型の初期値を設定するため、オブジェクト型の場合は null が設定されます。
ファクトリメソッドを使用するとオブジェクトの初期化コードをテストメソッドテンプレートに入れることができます。
1. 前提確認
ファクトリメソッドを利用しない場合、オブジェクト型のテストデータは null で初期化されます。
Cart#addItem メソッドのテストメソッドを で作成した場合(テストメソッド名は連番で付けられるため本チュートリアルの実施順によって異なります。)
@Test public void testAddItem() throws Throwable { | |
// Given Cart underTest = new Cart(); | |
// When Item item = null; // UTA: デフォルト値 | オブジェクト型がnull で初期化される |
underTest.addItem(item); } |
テストメソッドで使用するオブジェクトのファクトリメソッドを事前に登録しておくことで null 以外のデータを渡すことが可能です。
2. ファクトリメソッド作成
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. テストメソッド確認