たまたま、void followlink(obj page,obj link)
ページとリンクをキューに追加するだけのメソッドを実装しました。私はこの種の方法をテストしようとして失敗しました。
私が欲しいのは、キューにfollowlinkメソッドから受信したページとリンクが含まれていることをテストすることです。私のテストクラスはすでにTestCaseを拡張しています。では、そのような方法をテストするための最良の方法は何ですか?
たまたま、void followlink(obj page,obj link)
ページとリンクをキューに追加するだけのメソッドを実装しました。私はこの種の方法をテストしようとして失敗しました。
私が欲しいのは、キューにfollowlinkメソッドから受信したページとリンクが含まれていることをテストすることです。私のテストクラスはすでにTestCaseを拡張しています。では、そのような方法をテストするための最良の方法は何ですか?
JUnit FAQには、を返すテストメソッドに関するセクションがありますvoid
。あなたの場合、呼び出されたメソッドの副作用をテストしたいとします。
FAQに示されている例ではCollection
、アイテムが追加された後にサイズが変化することをテストしています。
@Test
public void testCollectionAdd() {
Collection collection = new ArrayList();
assertEquals(0, collection.size());
collection.add("itemA");
assertEquals(1, collection.size());
collection.add("itemB");
assertEquals(2, collection.size());
}
メソッドを呼び出す前後のキューの場合、次のようにサイズをテストできます。
int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?
もう1つの方法は、空のキューから始めて、followLinkを呼び出し、最初のアイテムをデキューして、その値をテストすることです。
ほとんどの場合、キューはprivateであるため、サイズのチェックは機能しません。私が見た「テスト用の設計」ソリューションは、代わりにパッケージのプライベートメソッドとメンバーを利用することです。junit テストは同じパッケージにある可能性が高いため、アクセスできます。
それ自体で、「queue.length()」副作用テストが機能します。
しかし、私はさらに先に進みます。実際には、メソッドが正しいページとリンクをキューに挿入したことを確認することを検討する必要があります。その詳細については、ページとリンクをどのように表現 (および組み合わせ) しているかについて、より多くの知識が必要です。
jMockソリューションも非常に優れていますが、実際には、独自のテスト ハーネスを作成することに慣れています。
したがって、メソッドの呼び出し後にキューをチェックし、メソッドに渡された値がキューに追加されているかどうかを確認します。このためには、キュー(getQueue()など)にアクセスする必要があります。
jMock ライブラリを使用して、キューを保持するストレージをモックします。jMock を使用すると、モックされたメソッドが呼び出されたかどうか、およびどのパラメーターを使用して呼び出されたかをアサートできます。
次の 2 つの方法で確認できます。
以下のプログラムのようにキュー/コレクションのサイズを使用して確認します: (Patrick が指摘したように)
@Test
public void testfollowlinkAdd() {
int size = queue.length();
queue.add(pageLink); //Considering an Object of PageLink
Assert.assertTrue(size+1, queue.length());
}
また