(Source Code: https://github.com/testfoxx/TwoFlashLight.git)
去除掉沒有使用的類別之後,我們把目標轉向 FP.java
首先觀察類別名稱,FP 沒有傳達出任何有關這個類別的意義,於是再看看 FP 的內容。
發現有個 TLog 的常數以及 p 的靜態方法,先從 TLog 開始,
追蹤 TLog 的引用位置,發現只有在 p 的方法中有被引用,所以修改其存取範圍為 private , 看起來它似乎只是被拿來當識別用。
於是修改 TLog 的名稱為 LOG_IDENTIFY。
接著 p 方法,其引用位置在 MainActivity 的 detBlackLight , detFrontLight , onKeyDown的三個方法中。
它接受一個參數並呼叫 Log.v 並把其參數內容列印出來,看起來是當作列印訊息用。因此可以把 p 修改為 print 。
最後看起來 FP 的用途就是追蹤並列印訊息,所以把 FP 改為 TraceLogger 。
重構前

package com.twoflashlight.utility;
import android.util.Log;
public class FP {
	public static final String TLog = "Trace Log";
	public static void p(String msg){
		Log.v(TLog, msg);
	}
}

重構後

package com.twoflashlight.utility;
import android.util.Log;
public class TraceLogger {
	private static final String LOG_IDENTIFY = "Trace Log";
	public static void print(String msg) {
		Log.v(LOG_IDENTIFY, msg);
	}
}

重構應用的技術相當簡單, 主要是rename class,rename variable,rename method,雖然簡單卻可以提昇整個類別的可讀性。
因為重構改變 FP 的內部功能,所以我們必須增加新的測項到 UnitTest。
在 UnitTest.java 加入新的測項如下:

public void testTraceLoggerPrint()
{
    TraceLogger.print("Test message from UnitTest");
}

由於 TraceLogger 的 print 方法沒有回傳值,也只能對其方法進行呼叫測試。
在 local 端執行 UnitTest 。執行結果如下

test:
[getlibpath] Library dependencies:
[getlibpath] No Libraries
     [echo] Running tests...
     [echo] Running tests ...
     [exec]
     [exec] com.twoflashlight.test.UnitTest:..
     [exec] Test results for InstrumentationTestRunner=..
     [exec] Time: 1.623
     [exec]
     [exec] OK (2 tests)
...

由於這次加入 testTraceLoggerprint() 測項,因此在 [exec] OK 有2個 test 通過。
完成 local 端的測試,後即可 merge 到遠端 Server。
 
refactoring part4