2016-05-04 22 views
0

アプリケーションのさまざまなメソッドをテストする方法を実装する必要があります。アプリケーションのメソッドを適切にテストする最も有名な方法であるため、JUnitに関する情報を収集していましたが、私は多くの質問があり、見つけられない答えが必要です。複雑な環境でのJUnitテスト

私は次のJUnitのテストを持っているので、簡単に私は考えることができます:

public class Civilian { 
    private final String firstName; 
    private final String lastName; 
    private final int birthDate; 

    public Civilian(String firstName, String lastName, int year) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.birthDate = year; 
    } 

    public String getFullName() { 
     return firstName + " " + lastName; 
    } 
} 

とテストクラス:

public class CivilianTest { 

    @Test 
    public void getFullNameTest() { 
     Civilian civ = new Civilian("bob", "Reynolds",1997); 

     Assert.assertEquals("bob Reynolds", civ.getFullName()); 
    } 
} 

この例では、私はgetFullNameの結果を知っている必要がありますassertEquals()メソッドでそれを比較するメソッド。しかし、どのようにしてこの種のテストがこの方法がどんな場合でも動作することを保証することができましたか?

私が取り組まなければならないアプリケーションでは、このデータがメソッドによって変更され、このデータが変更された別のデータベースからのデータが使用されます。

私はそれにメソッドを使用する前に、このデータの結果を知るのは難しいことです。 JUnitはこのようにしか使われていないのですか?同じデータでこの同じメソッドを複数回使用してテストするにはどうすればよいですか?

+2

@マコトの答えに同意します。 JUnitを使用すると、複数の入力データの組み合わせでテストを実行できます。パラメータ化されたテスト[ここ](http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test)を参照してください。 /)または[ここ](https://ourcraft.wordpress.com/2008/08/27/writing-a-parameterized-junit-test/)。しかし、通常は必要ではありません。私はパラメータ化されたテストを使用したことはないと思う(パフォーマンステストを除いて、それは別の話だ)。 – Mifeet

答えて

1

あなたが心に留めなければならないテストのいくつかの原則があります。

  • は、あなたがそれを介して実行したいデータを使用してテストを設定します。 あなたはがこれを支配しています。
  • コードは、有効でサポートされているすべてのデータを処理するのに十分な堅牢性を備えている必要があります。出てくるエラーの事例は賢明である。
  • すべてのケースをテストします。ハッピー・パスのみをテストすると、コードがエッジ・ケースまたは予期しない条件に入るときに何も実行されません。あなたのgetFullName()方法については

、私は検討する価値がある4つの別個の例を参照してください。両方firstNamelastNameがnullでない場合

  • firstNameがnullで、lastNameがnullでない
  • firstNameがnullでなく、lastNameがnullでない場合
  • firstNamelastNameは、あなたがこれらのケースをカバーしている場合、それははあなたがそれにポンプ実際のものとライブデータを問題ではないはず

ヌルです。この方法で遭遇する4つの可能性のある状態をテストし、これらのケースの見知らぬ人で何をすべきかについて賢明な選択をすることを願っています。

主なことは、小さなユニットを見て、それがうまく動作することを保証するエンドツーエンドのテストでユニットテストを組み合わせることです。一方、他のユニットはアプリケーション全体を見ていますそれにもかかわらず相当な量のデータ)、それが1つの凝集単位として振る舞うことを保証する。この方法でシステム全体ではなくユニットのコードをここでテストしています。

関連する問題