2012-02-27 159 views
2

我正在學習敏捷實踐課程,並且我有作業。他們教我的是,在更改代碼(重構或添加功能)之前,我應該添加一些測試,以獲得信心並確保在重構​​時不會改變行爲。這很清楚並且合理,但如果代碼不是首先進行一些重構就不可測試的呢?測試遺留代碼

簡單的例子:

public class Summation 
{ 
    private int addend1; 
    private int addend2; 

    public Summation(int addend1, int addend2) 
    { 
     this.addend1 = addend1; 
     this.addend2 = addend2; 
    } 

    public int doSum() 
    { 
     System.out.println(addend1 + addend2); 
    } 

    // Getters/setters 
} 

我想用FIT運行驗收/集成測試,並檢查下表驗證:

---------------------------- 
| addend1 | addend2 | result | 
---------------------------- 
| 1  | 1  | 2  | 
---------------------------- 
| 1  | -1  | 0  | 
---------------------------- 
| -1  | 1  | 0  | 
---------------------------- 
| -1  | -1  | -2  | 
---------------------------- 

但是,由於功能doSum()打印對標準輸出流的總和,很難爲它寫一個測試(我寧願避免截取標準輸出)。稍微重構代碼以獲得返回總和的方法會更有意義。但是因爲在寫任何測試之前我在技術上「不允許」更改代碼,所以不建議這樣做。

你能給我任何提示嗎?你將如何繼續?

謝謝!

回答

2

聽起來類似於this question

無論您是否允許更改代碼,您都必須截取標準輸出流。無論如何,這是行爲的一部分。

1

您可以編寫一個test.cpp文件來調用Summation.Summation(x,y),其中包含x和y的各種值,並驗證/記錄結果。確保結果符合你的期望。接下來,您現在可以編輯Summation類並再次運行測試(來自test.cpp)以確保值與最初的值相同。