2012-04-28 5 views
0

に混乱しています、私はちょうど私がこのクラスをテストすることができます方法を理解しようとしています。私が開始され、各テストの前に空にし、自動的にリセットされQueueTestと呼ばれるのJUnitを作りたい私は、Javaプログラミングに新しい本のJUnitテストケース

public class Queue<E> { 

private ArrayList<E> items; 

public Queue(){ 
    items = new ArrayList<E>(); 
} 

public void join(E e) { 
    items.add(e); 
} 

public E leave() throws EmptyQueueError { 
    if (items.isEmpty()) { 
     throw new EmptyQueueError(); 
    } 
    return items.remove(0); 

} 

} 

:私は、キューのクラスを作っていますか?次に、空のキューから項目を削除するとEmptyQueueErrorがスローされることを確認しますか?最後に、いくつかのアイテムが(最初に)空のキューに加わったときに、最初に参加したアイテムが最初に参加したアイテムであることをチェックします。

それは私には、次の午前のチュートリアルだが、それは私が理解するために失敗しました。私は上のクラスを作って、私はJTestクラスを試みました:

package queue; 

public class QueueTest<e> { 

private Queue q; 

@Before 
public void setUp() throws Exception { 
} 

@After 
public void tearDown() throws Exception { 
} 

@Test 
public void test() { 
    q = new Queue<e>(); 
    assertEquals("Empty Queue", 0, q); 

} 

} 

私は達成しようとしているものに近いですか?私は最初のことをやろうとしています。

はあなたの助けと十分な時間をありがとうございました。

+0

あなたはどのような問題を経験していますか?あなたのテストはコンパイルや実行に失敗しますか? – duffymo

+0

実行に失敗しました。おそらく私はそれを行うことができないため。私は論理的に理解していない。 – DesignAndCode

+0

コンパイルしますか?どのようにそれを実行しようとしますか? – duffymo

答えて

1

あなたはうまくいっています。

@Test 
public void test() { 
    q = new Queue<e>(); 
    assertEquals("Empty Queue", 0, q); 

} 

この問題は、新しいQueueインスタンスを作成しても何もしないということです。

次に、あなたのテストの内臓は、これが意味することは、あなたがキュー(「A」)作ると思いますということです

@Test 
public void test() { 
    Queue<Integer> q = new Queue<Integer>();  // A 
    try { 
     Integer ignore = q.leave();  // B 
     fail("exception expected");    // C 
    } catch (EmptyQueueError ex) { 
     // implicit success      // D 
    } 
} 

可能性があり、その後すぐにアイテム(「B」)を取得しよう。これにより例外が発生するはずです。そうでない場合、テストは「例外が予想されます」(「C」)で失敗します。予想される例外がスローされた場合、コードは動作します( 'D')

これを取得したら、さらに投稿します。

+0

これは非常に意味があります。A、B、C、Dにコメントしていただきありがとうございます。もう一度トニー、ありがとう、ありがとう。 – DesignAndCode

0

これを試してください:彼らは私のために走ります。あなたは遠く離れていません。

package cruft; 

import org.junit.Assert; 
import org.junit.Test; 

public class QueueTest { 
    @Test 
    public void test() { 
     Queue<String> q = new Queue<String>(); 
     Assert.assertEquals("queue should be empty", 0, q.size()); 

    } 
} 

お知らせ:あなただけのテストでインスタンスを作成する必要があり

package cruft; 

    import java.util.ArrayList; 

    public class Queue<E> { 

     private ArrayList<E> items; 

     public Queue(){ 
      items = new ArrayList<E>(); 
     } 

     public void join(E e) { 
      items.add(e); 
     } 

     public E leave() throws EmptyQueueError { 
      if (items.isEmpty()) { 
       throw new EmptyQueueError(); 
      } 
      return items.remove(0); 

     } 

     // Note: I added this. 
     public int size() { return this.items.size(); } 
    } 
} 

そして、ここではテストです。あなたのキューに保持する具体的なタイプのもの(この場合はString)があることを確認してください。

は、ジェネリック医薬品があなたのためにやっていることを忘れないでください:彼らはあなたがその動作が、それは上に保持しているオブジェクトの種類に依存しないコレクションまたはコンテナを作成してみましょう。だから、文字列や人やペンギンを含むキューがあるかもしれません。

+0

私は例外を生成するためにleave()を呼びたいと思うと思います。 –

+0

彼は自分のクラスをテストする方法を学びたいと思っています。これは単なる例です。クラスパスにクラスEがないかぎり、彼はあなたの例に問題があります。 – duffymo

+0

彼の_leave()_がEを返します –

0

ここで何を試そうとしていますか?あなたがするときassertEquals("Empty Queue", 0, q)ここで何を試そうとしていますか?キューが空であることを確認しますか?

assertsの場合、通常はIE Q == 0とテストするものがあり、オプションのメッセージが表示されます。テストは失敗した場合に出力されます。

なぜassertEqualsが失敗するのかという欠陥は、qの値が何であるかを調べることによってわかります。ここで

0

は例外をテストする方法と、各テストメソッドの前にキューをリセットする方法を示し、TestNGでそれを行う方法です:

public class QueueTest { 

    private Queue q = new Queue(); 

    @BeforeMethod 
    public void setUp() throws Exception { 
     q.reset(); 
    } 

    @Test(expectedExceptions = EmptyQueueError.class) 
    public void shouldThrowIfRemovingFromEmpty() { 
    assertTrue(q.isEmpty()); 
    q.remove(0); 
    } 

} 

あなたは非常に厳格になりたい場合は、おそらくそれをテストする必要があります各キューは最初は空であり、例外は2つの別個のテスト方法である。

関連する問題