2012-03-30 72 views
2

JUnitテストを使用してJavaでコレクションの注文アルゴリズムを検証したいと考えています。コレクションに「B」、「C」、「A」を入力してソートしたい場合(アルファベット順など)、JUnitでこれをテストする適切な方法は何ですか?JUnitテストでコレクション内の要素の順序をテストする方法は?

私はComparableインターフェイスを実装していて、並べ替えが機能していることを確認したいと思います。

この質問は、JavaやJUnitを超えて、どの言語の一般的なテストにも広がっていると思います。

+0

ソートアルゴリズムを実装していて、コレクションが適切にソートされているかどうかテストしたいのですか? – assylias

+0

あなたは配列を走査して、すべてのN要素がN + 1要素よりも小さいことを確認する必要があります –

+0

ここに別のトピックの解決策があります:http://stackoverflow.com/a/42023087/3062707 – netod

答えて

9

の値がと予想される別のコレクションを作成し、結果が一致するかどうかを確認します。

しかし、あなただけの IComparableないいくつかのソートアルゴリズムの実装をチェックしようとしている場合は、正直に言うと、私は ちょうど compareToを呼び出した結果についての表明になるだろう。テストを書く方が簡単になり、失敗を理解するにはという方が簡単です。

(ソートテストが失敗した場合、それはちょうど、多くの比較のが間違ったことをしたことを意味する。それはあなたが比較が間違ったことをしたどのをうまく手助けしません。)

0

私は特別な場合でスタートを言う:

  1. 逆順
  2. 入力で空の入力
  3. 入力順に
0

JUnitを使用する場合でも、他のテストフレームワークを使用する場合でも問題ありません。単体テストに関する問題は、クラスの振る舞いをテストしたいということです(これがUNITテストの理由です)。テストクラスそのものはComparableを実装すべきではありません。それはあなたのクラスであるべきですが、これをテストするためには無関係です。

テストするシナリオのリストを考えてみましょう。

たとえば、 "B"、 "C"、 "A"を送信し、返すものが "A"、 "B"、 "C"と等しいことを確認します。順序付きリストを提出する場合は、同じ順序付きリストを返すことを確認してください。入力が正しく入力されているかどうか、入力が空であるかどうか、境界の場合( "A"、 "B"、 "A"はテストに適している可能性があります)を正しく処理できることを確認してください。それぞれのケースについて1つのテストを行う必要があり、アサーションはすべてのテストで特定のケースを正確にチェックする必要があります。

1

私はあなたの質問を正確に受けているかどうかはわかりません。あなたの質問であった場合

java.lang.AssertionError: 
Expected: iterable containing ["AAA", "ABC", "AZZ", "BBB"] 
    got: <[AAA, ABC, BBB, AZZ]> 

    at org.junit.Assert.assertThat(Assert.java:778) 
    at org.junit.Assert.assertThat(Assert.java:736) 
    at ... 

:この1の実行結果

import java.util.Collection; 

import org.hamcrest.collection.IsIterableContainingInOrder; 
import org.junit.Assert; 
import org.junit.Test; 

import com.google.common.collect.Lists; 
public class MyTest { 
    @Test 
    public void collectionTest() { 
     final Collection<String> actual = Lists.newArrayList("AAA", "ABC", "BBB", "AZZ"); 
     Assert.assertThat(actual, IsIterableContainingInOrder.contains("AAA", "ABC", "AZZ", "BBB")); 
    } 
} 

:それはテストを書くの技術的な側面に出たとき、あなたはこれらの線に沿って何かを(例はしかしHamcrestを使用しています)使用することができますより哲学的な答えが2つあります。

関連する問題