0

Java プログラミングは初めてなので、このクラスをテストする方法を理解しようとしています。私はQueueクラスを作りました:

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);

}

}

各テストが開始される前に、自動的に空にリセットされる QueueTest という JUnit を作成したいですか? 次に、空のキューからアイテムを削除すると 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);

}

}

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

あなたの助けと十分な時間をありがとう.

4

4 に答える 4

1

元気です。

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

}

これの問題は、新しい Queue インスタンスを作成するが、それに対して何もしないことです。

次に、テストの内部は次のようになります

@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
    }
}

これが意味することは、キュー ('A') を作成し、すぐにアイテム ('B') を取得しようとすることです。これにより、例外が発生するはずです。そうでない場合、テストは「例外が予想されます」('C') で失敗します。予想される例外がスローされた場合、コードは機能します ('D')

これが機能するようになったら、さらに投稿します。

于 2012-04-28T01:29:07.977 に答える
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つの別々のテストメソッドであるかどうかをテストする必要があります。

于 2012-04-28T22:54:39.923 に答える
0

では、ここで何をテストしようとしていますか?ここで何assertEquals("Empty Queue", 0, q)をテストしようとしていますか?キューが空ですか?

asserts彼らが通常取るものはテストするものであり、IE Q == 0であり、オプションのメッセージを受け取ります。これは、テストが失敗した場合に出力されます。

失敗する理由の欠陥は、assertEqualsその価値を調査することで確認できますq

于 2012-04-28T01:56:58.550 に答える
0

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

    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(); }
    }
}

そして、ここにテストがあります:

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());

    }
}

注意: テストでインスタンスを作成する必要があります。キューに保持する具体的な型 (この場合は文字列) があることを確認してください。

ジェネリックが何をしているかを思い出してください。ジェネリックを使用すると、保持するオブジェクトのタイプに依存しない動作を持つコレクションまたはコンテナーを作成できます。したがって、String、Person、または Penguins を含む Queue がある場合があります。

于 2012-04-28T01:27:27.230 に答える