2017-08-24 2 views
0

私のテスト方法が失敗しています。イテレーターの場所に何を配置するのか分かりません。現在はnullです。イテレータがあるときにこれをテストするには?ここでJava:イテレータでメソッドをテストする

はそれがないすべての配列を検索し、与えられた数のインデックスを返しますされ、作品のフルメインクラスです。ここ

public class Main { 
    public static void main(String[] args) { 

    final List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9); 
    final Integer x = Integer.valueOf(1); 
    System.out.println(findSame(numbers.iterator(), x, 0)); 
} 
public static final int findSame(Iterator<Integer> iterator, Integer x, int idx) { 
    if (!iterator.hasNext()) { 
     return -1; 
    } 

    if (iterator.next().equals(x)) { 
     return idx; 
    } else { 
     return findSame(iterator, x, idx+1); 
    } 
    } 
} 

は機能しない私のテストトライアル方法、です。

@Test 
public void searchNumReturnsIndex1(){ 
    Main instance = new Main();  

    System.out.println("Index"); 

    Iterator<Integer> iterator = null; 

    int x = 6; 

    int expResult = 2; 
    int result = Main.findSame(iterator, x, 2); 

    assertEquals(expResult, result); 
    } 
+1

まず、何をしようとしているのかを説明します。あなたがどこにいるのか説明してください。それから私達は助けることができるかもしれません。 – shmosel

+0

@shmoselしました。 – Camila

+0

あなたがやろうとしていることが少しはっきりしています。しかし、まだあなたが立ち往生している場所を明確にしていない。なぜ単体テストは 'main()'の作業コードよりも難しいのですか? – shmosel

答えて

2

テストは何かをテストする必要があります。私がリストを持っている場合と同様に、

  1. は、[」2,3を
  2. "私は[2,3,5,7,11]リストを持っていると私は7を検索する場合、それは3を返す必要があります" 5,7,11]と6を検索すると-1が返されます。

テストが何をすべきかを決めたら、正確に1つのケースをテストする簡単で簡単なものでなければなりません。

@Test 
public void searchFor7InShortListOfPrimes() { 
    List<Integer> numbers = Arrays.asList(2, 3, 5, 7, 11); 
    assertEquals(3, Main.findSame(numbers.iterator(), 7, 0)); 
} 

@Test 
public void searchFor6InShortListOfPrimes() { 
    List<Integer> numbers = Arrays.asList(2, 3, 5, 7, 11); 
    assertEquals(-1, Main.findSame(numbers.iterator(), 6, 0)); 
} 

しかし、テストではすべての可能性をカバーする必要があります。同様に、リストが降順である場合、またはソートされていない場合はどうなりますか?あなたの方法に適したものは何でも。あなたのアルゴリズムがまったくそれに依存しないならば、ソートされていない/降順のソートされたものをテストしないでください。

関連する問題