web-dev-qa-db-ja.com

テストでこの手法の名前はありますか?

いくつかのコードのテストを作成し、それが実際に想定どおりにテストされていることを確認したい場合は、テスト対象のコードを台無しにするか削除して、テストが失敗するかどうかを確認します。そうでない場合は、問題があります。

このテクニックの名前はありますか?誰かにそうするように提案したいときはいつも、文章で話さなければならないのは本当に面倒です。

1
Alistair

あなたはミューテーションテストを探しています。

ミューテーションテストの考え方は、ご指摘のとおり、コードを変更してテストを失敗させることができるかどうかを確認することです。例はそのようなものです:

public double getDiscountedRate(int age, int employmentDurationInMonths) {
    return age < 30 || employmentDurationInMonths < 18 ? 0.2 : 0.05;
}

したがって、このテストがある場合:

@Test
public void canGetCorrectDiscountedRate() {
    assert getDiscountedRate(29, 24) == 0.2;
}

アサーションは真になります。式がそのように変更された場合:

public double getDiscountedRate(int age, int employmentDurationInMonths) {
    return age < 30 && employmentDurationInMonths < 18 ? 0.2 : 0.05;
}

次に、アサーションが偽であると予想します。これは、(演算子後の変更)などの不注意なエラーがメソッドにある可能性がある場合に役立ちます。

public double getDiscountedRate(int age, int employmentDurationInMonths) {
    return age < 30 && employmentDurationInMonths < 18 ? 0.2 : 0.2; // where is 0.05?
}

この場合、変更されたコードに対してアサーションが失敗しなかったという事実は、条件がfalseの場合でも、同じ割引率を誤って返していたことを開発者に知らせます。

ミューテーションテストに関するウィキペディアの記事 も関連記事として 'フォールトインジェクション' を指摘しています。

6
h.j.k.