(2016/9/24 追記)とりあえず動くものを作った。
【java】DTO のテストコードを自動生成への道② - 山崎屋の技術メモ
プライベート変数とその setter 、 getter のみで構成された DTO のソースを自動生成することがある。
自動生成できるのであれば、そのソース自体をなくす努力をするべきだと思うが、、、 Lombok という setter 、getter 、toString 、 equals を自動生成してくれるライブラリもあるので、なるべくはそれを使いたい。
ただ、プロジェクトの方針や使用するフレームワークによっては、プライベート変数と、その setter、 getter のみで構成されたDTO(これ名前ついてないのかな?)を使わざるを得ない場合もある。
そこで DTO を自動生成するなら、その自動生成した DTO クラスを自動で読み込み、テストコードも自動生成してしまおうというのが今回の主旨である。
ともあれリフレクション
まず、リフレクションについて復習する。
リフレクションを使うと、クラスのメソッド名や、変数名をプログラム実行中に取得できる。
DTO クラスのテストコードを自動生成するのであれば、その DTO の private 変数名を動的に読み込まなければならない。
DTO
次のような DTO を作成した。
package org.yyama; public class SomeDto { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "SomeDto [name=" + name + ", age=" + age + "]"; } }
name と age というプライベート変数を持っていて、その setter、getter がメソッドとして存在する。toString もついでに作っておいた。
リフレクションを使う
では、リフレクションを使って、SomeDto のプライベート変数の変数名と型を表示してみる。
package org.yyama; import java.lang.reflect.Field; public class Main { public static void main(String... args) throws Exception { // 対象のクラスを取得 Class<SomeDto> clazz = SomeDto.class; // フィールドをすべて取得する。 getFields() というメソッドもあるが、 // それでは private メソッドを取得できない。 Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { // Field#getName() で変数名、 // Field#getType() で型名を取得できる。 System.out.println(field.getName() + " : " + field.getType()); } } }
次のような出力が得られた。プライベート変数がリフレクションで取得できていることが確認できる。
name : class java.lang.String age : int
まとめ
これを利用して「プライベート変数と、その setter、 getter のみで構成されたDTO」(これ名前ついてないのかな?w)のテストコード自動生成にチャレンジしてみたい。
つづく
(2016/9/24 追記)続きを書いた。
【java】DTO のテストコードを自動生成への道② - 山崎屋の技術メモ
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (135件) を見る
スッキリわかるJava入門 実践編 第2版 スッキリわかるシリーズ
- 作者: 中山清喬
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: Kindle版
- この商品を含むブログを見る
EFFECTIVE JAVA 第2版 (The Java Series)
- 作者: Joshua Bloch,柴田芳樹
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る