(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