Java Functional Interface〜JUnitのテストでラムダ式にコード短縮〜

ポイント

テストケースの実装中に同じ処理を関数化して実行するように実装しました。

詳細

具体的には以下の赤い部分を2回書かずにFunctional Interfaceを使用するように実装しました。実装したコードはGitにアップしています。参照しているクラスは同じディレクトリに配置してあります。

/** 自分の周りをチェックするメソッドのテストケース */
@Test
public void testCheckAround() {
//// 本当はメソッド1つにつき1ケースのテストを行うが、小さなテストなので勘弁してください。。。 ////
try {
Method test = this.getPrivateMethod("checkAround", String.class);
Consumer func = str -> {

try {
test.invoke(target, str);

} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {

e.printStackTrace();

fail("アクセス違反です。");
           }
       };
//// サンプルデータ1での検証 ////
func.accept("1010010010");
// テストケース1:周囲にアイテムがあるかの判定
ClientData data = target.getClientData();
assertEquals(true, data.isItem());
// テストケース2:周囲に相手プレーヤがいる化の判定
assertEquals(false, data.isPlayer());
// テストケース3:行動できるスペースにブロックがあるかどうか
       WalkHandler handle = data.getHandler();
assertEquals(true, handle.isOkUp());
assertEquals(true, handle.isOkDown());
assertEquals(true, handle.isOkLeft());
assertEquals(true, handle.isOkRight());
//// サンプルデータ2での検証 ////
func.accept("1020020020");
// テストケース1:周囲にアイテムがあるかの判定
ClientData data2 = target.getClientData();
assertEquals(true, data2.isItem());
// テストケース2:周囲に相手プレーヤがいる化の判定
assertEquals(false, data2.isPlayer());
// テストケース3:行動できるスペースにブロックがあるかどうか
WalkHandler handle2 = data2.getHandler();
assertEquals(false, handle2.isOkUp());
assertEquals(false, handle2.isOkDown());
assertEquals(true, handle2.isOkLeft());
assertEquals(true, handle2.isOkRight());
} catch (SecurityException e) {
e.printStackTrace();
fail("セキュリティ違反です。");
} catch (IllegalArgumentException e) {
e.printStackTrace();
fail("メソッドの引数違反です。");
}
}

引数が1つで、返却値がない場合はConsumerを使用する、他の型の場合はそれぞれに対応するIFを使用するようです。参考にしたのはこちらのサイトです。

ちなみに、デバックをしている時の風景をキャプチャしてみました。

でわでわ。。。