ユニットテスト:簡単な例でテスト駆動開発(TDD)を理解する

2052 ワード

通常、アプリケーションを設計し、ユニットテストを迅速に作成して設計を検証します.これらのテストを作成するとき、これらのテストは私の最初の設計を改善するのに役立ちます.ますます多くのユニットテストを作成するにつれて、フィードバックされている良性サイクルも、できるだけ早くユニットテストを作成することを奨励します.私たちが設計して実現すると、私たちがどのようにクラスをテストするかを自然に知りたいと思っています.この方法論に基づいて,ますます多くの開発者がテストの容易さからテスト駆動開発に移行している.

簡単な例でTDDを理解する


次に,「小数を2桁残して四捨五入できない」例から,テスト駆動開発とは何かを理解する.
質問:
メソッドを記述し、doubleパラメータを入力し、小数を2桁保持し、四捨五入できないStringを返します.
ステップ1:テスト・インスタンスの作成
我々の予想した結果に従って,パラメータ化されたユニットテスト例を記述した.
@RunWith(value = Parameterized.class)
public class keep2DecimalParameterizedTest {
    private String expected;
    private double param0;
    @Parameterized.Parameters
    public static Collection getTestParameters() {
        return Arrays.asList(new Object[][]{
                {"1.00", 1.002},
                {"2.15", 2.156},
                {"3.14", 3.141}
        });
    }
    public keep2DecimalParameterizedTest(String expected, double param0) {
        this.expected = expected;
        this.param0 = param0;
    }
    @Test
    public void add() throws Exception {
        Assert.assertEquals(expected, Compute.keep2Decimal(param0));
    }
}

私たちは今、このテスト例を実行するのは失敗したに違いない.なぜなら、Compute.keep 2 Decimal()このメソッドはまだ実装されていません.次に、このクラスとメソッドを作成し、関連する論理を実装します.
ステップ2:インプリメンテーションの作成
この方法の機能をテスト例に基づいて実現する
public class Compute {
    /* , */
    public static String keep2Decimal(double arg0) {
        return String.format("%.2f", arg0);
    }
}

ステップ3:テストの実行
ユニットテストを実行し、パラメトリックテストの2番目の項目が失敗したことを発見した.keep 2 Decimal(2.156)、実行結果は2.16ですが、2.15と予想されています.
ステップ4:実装の改善
public class Compute {
    /* , */
    public static String keep2Decimal(double arg0) {
        return String.format("%.2f", (int) (arg0 * 100) /100.0);
    }
}

ステップ5:再テスト
テストに合格

上記例の分析


従来の開発サイクルは、符号化、テスト、(繰り返し)、提出の各段階から構成されています.開発者はTDDを使用した後、テスト、符号化、(繰り返し)、提出という微小なようだが、実際には驚くほど効果的な調整を行った.テストは設計を推進し、方法の最初のお客様になりました.