2017-10-12 9 views
0

もっと複雑な方法のためのユニットテストを学ぼうとしています。私は配列を検索し、 "ターゲット"のインデックスが含まれている別の配列を返すリニア検索メソッドを持っています。この方法のテストを書くにはどうすればいいですか?ここには以下の方法があります。ユニットテストの線形検索方法

public static <T extends Comparable> int[] linearSearch3 (T[] data, T 
     target) 

    int count = 0; 
    int index = 0; 
    int[] indices = new int[data.length]; 


    for (int i = 0; i < data.length;i++){ 
     if (data[i] == null) break; 
     if (data[i].compareTo(target) == 0){ 
      indices[count] = i; 
      count++; 
     } 
    } 
    Arrays.copyOf(indices, count); 
    int[] copy = Arrays.copyOf(indices,count); 

    if(count != 0){ 
    return copy; 
    } 
    else 
     return null; 

これまでのテスト方法ではこれがあります。 2つの配列は私のテストクラスのフィールドです。 intArrayは私が探している配列です。 newArrayは返す配列です。しかし、私はこれを正しく行うつもりかどうかはわかりません。私の2番目の行に互換性のない型エラーが発生しました。 "型変数Tのインスタンスが存在しないので、int []はTが型変数であるIntegerに適合します。"

private final Integer[] intArray = {2, 5, 6, 8, 12, 17, 3, 45, 29, 88, 76, 54, 
1, 12, 5, 41, 12, 99}; 

private final Integer[] newArray = {2}; 

    @Test 
    public <T extends Comparable> void testLinearSearch3() { 

    System.out.println("Testing LinearSearch3"); 
    Integer result = Searching.linearSearch3(intArray,(Integer)2); 

助けてください。ありがとうございました。 NEWARRAYが2のインデックスを含むようになっている場合

答えて

0

は、私はそれがあるべきだと思う{0}の代わりに{2}返された値もint型[]、その後、あなたが呼び出すことができるのassertEqualsだろう

()への返された配列を比較し、NEWARRAY

int[] result = Searching.linearSearch3(intArray,(Integer)2); 
for(int i=0;i<result.length;i++){ 
    assertEquals(result[i], (int)newArray[i]); 
} 
+0

ループの前に長さアサーションを追加して、assertEqualsをフィードすることをお勧めします結果[i]とnewArray [i]の両方を使用できるため、Objects#equalインタフェース – Igor

0

あなたtestLinearSearch3()方法は、T型パラメータに依存しないので、<T extends Comparable>宣言が必要ありません。あなたは明示的にテストメソッドの本体にInteger型を使用しており、配列はlinearSearch3(...)メソッドの定義に関する型パラメータ要件を満たしています

関連する問題