测试遗留代码

时间:2012-02-27 10:00:31

标签: testing agile legacy-code fit-framework

我正在学习敏捷练习课程,我有一份功课。他们教给我的是,在更改代码(重构或添加功能)之前,我应该添加一些测试,以获得信心,并确保在重构​​时我不会改变行为。这是明确的,也是有道理的,但是如果代码在没有先进行重构的情况下是不可测试的呢?

简单示例:

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 个答案:

答案 0 :(得分:2)

听起来类似于this question

无论您是否允许更改代码,您都被迫拦截标准输出流。无论如何,这是行为的一部分。

答案 1 :(得分:1)

您可以编写一个test.cpp文件来调用Summation.Summation(x,y),其中包含表中x和y的各种值,并验证/记录结果。确保结果符合您的预期。接下来,您现在可以编辑Summation类并再次运行测试(来自test.cpp),以确保它们与最初的值相同。