単にページとリンクをキューに追加するメソッド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?
別の方法として、空のキューから始めてfollowLinkを呼び出し、最初のアイテムをデキューしてその値をテストします。
ほとんどの場合、キューはprivateであるため、サイズのチェックは機能しません。私が見た「テスト用の設計」ソリューションは、代わりにpackage privateメソッドとメンバーを使用することです。 junitテストは同じパッケージに含まれている可能性が高いため、アクセスできるようになります。
それだけで、「queue.length()」の副作用テストが機能します。
しかし、さらに先に進みます。実際、メソッドがcorrectページとリンクをキューに挿入したことを確認することを検討する必要があります。その詳細には、ページとリンクをどのように表現(および結合)するかについての詳細な知識が必要です。
jMockのソリューションも非常に優れていますが、実際には、独自のテストハーネスの作成に精通しています。
JMockライブラリを使用して、キューを保持するstorageをモックします。jMockは、モックされたメソッドが呼び出されたかどうか、どのパラメータで呼び出されるかをアサートできます。
だから-メソッドに渡された値がキューに追加されている場合、メソッドの呼び出し後にキューを確認してください。これには、キュー(getQueue()など)にアクセスする必要があります。
次のことを確認する方法は2つあります。
以下のプログラムのように、キュー/コレクションのサイズを使用して確認します:(パトリックが指摘したように)
@Test
public void testfollowlinkAdd() {
int size = queue.length();
queue.add(pageLink); //Considering an Object of PageLink
Assert.assertTrue(size+1, queue.length());
}
OR