注意到,在上面的示例類中,提供服務的代碼分為兩個部分,一部分是框架提供的、難以進行測試模擬的代碼,這類的代碼有很多,例如對HttpRequest的處理,模擬http的數據是比較復雜的。這就增大了測試的難度。而這部分的處理往往是平臺提供的功能,不需要進行測試。第二部分是關鍵的業務代碼,是測試的核心。那么,一方面構建測試環境難度較大,另一方面又需要對業務代碼進行測試。因此我們自然就想到將待測的業務代碼分離出來:
public class UserLog
{
public static void Write(String name)
{
//寫入用戶信息;
}
}
public class UserLogAdapter
{
public Service()
{
//難以進行測試的代碼
UserLog.Write(Name);
}
}
這樣,測試就可以針對UserLog進行,由于不需要復雜的測試環境,對UserLog進行測試的成本是很低的。在J2EE核心模式一書中,提到了一種向業務層隱藏特定表示層細節的重構思路:
雖然,這種重構方法的出發思路是避免界面層次的細節暴露給業務層,但是從另一個角度來說,也提高了業務層組件的可測試性。畢竟,構建一個用戶信息,要比構建一個HttpServeltRequest要容易的多。
文章來源于領測軟件測試網 http://www.kjueaiud.com/