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()は合計を標準出力ストリームに出力するため、そのテストを書くのは困難です (私は標準出力をインターセプトすることは避けたいと思っています)。合計を返すメソッドを作成するには、コードを少しリファクタリングする方が理にかなっています。しかし、テストを書く前にコードを変更することは技術的に「許可されていない」ため、これはお勧めできません。

ヒントを教えてください。どのように進めますか?

ありがとうございました!

4

2 に答える 2

2

この質問に似ています。

コードの変更が許可されているかどうかにかかわらず、標準出力ストリームをインターセプトする必要があります。いずれにせよ、それは行動の一部です。

于 2012-02-27T17:23:13.533 に答える
1

テーブル内の x と y にさまざまな値を指定して Summation.Summation(x,y) を呼び出し、結果を検証/記録する test.cpp ファイルを作成できます。結果が期待どおりであることを確認してください。次に、Summation クラスを編集し、(test.cpp から) テストを再度実行して、値が最初と同じであることを確認します。

于 2012-02-27T17:19:29.837 に答える