2012-02-27 121 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)以确保值与最初的值相同。