[asin:4797337990:title] 第1章
第1章 シンボリック定数によるマジックナンバーの置き換え.
第1章のまとめ
マジックナンバーは,数字のままなので意味が分かりにくいし,複数箇所に存在すると変更が難しくなるから,シンボリック定数に置き換えましょうという話.
JUnitによるテスト
リファクタリングするには,テストが必要になるので,
まず,[ThinkIT] 第10回:JUnitの利用 (1/4) を参考にJUnitの簡単な使い方を学んだ.
とりあえず,
assertEquals(期待する値, 実際の値);
という使い方を覚える.
この章に関してやってみたこと
Robotクラスのorderメソッド
著者のWebサイト『Java言語で学ぶリファクタリング入門』でプログラムをダウンロードできるようだが,自分で作ってみた.
僕の持っている技術((assertEquals()))だと,標準出力に対するテストが分からなかったので,order()メソッドは,Stringを返すように変更した.
下記はリファクタリング後のorder()メソッド.
/** * 命令メソッド * @param command Robotへの命令 * @return Robotが実行した動作(文字列)を返す */ public String order(int command) { if (command == COMMAND_WALK) { return this.getName() + " walks."; } else if (command == COMMAND_STOP) { return this.getName() + " stops."; } else if (command == COMMAND_JUMP) { return this.getName() + " jumps."; } else { return ("Command error. command = " + command); } }
RobotTestクラスのtestOrderメソッド
Robotクラスのorder()メソッドに対するテストメソッド.
/** * orderメソッドのテストメソッド */ @Test public void testOrder() { Robot robot = new Robot("Andrew"); assertEquals("Andrew walks.", robot.order(Robot.COMMAND_WALK)); assertEquals("Andrew stops.", robot.order(Robot.COMMAND_STOP)); assertEquals("Andrew jumps.", robot.order(Robot.COMMAND_JUMP)); /* リファクタリング前 assertEquals("Andrew walks.", robot.order(0)); assertEquals("Andrew stops.", robot.order(1)); assertEquals("Andrew jumps.", robot.order(2)); */ assertEquals("Command error. command = -1", robot.order(-1)); }