web-dev-qa-db-ja.com

Junitテストツールでvoidメソッドをテストする方法は?

単にページとリンクをキューに追加するメソッドvoid followlink(obj page,obj link)を実装するだけです。私はこの種の方法のテストに失敗しました。

私が欲しいのは、キュー内にfollowlinkメソッドから受け取ったページとリンクが含まれていることをテストすることです。私のテストクラスは既にTestCaseを拡張しています。それでは、そのような方法をテストする最良の方法は何ですか?

28
user152462

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());
}
42
Bill the Lizard

メソッドを呼び出す前後のキューの場合、サイズをテストできます:

int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?

別の方法として、空のキューから始めてfollowLinkを呼び出し、最初のアイテムをデキューしてその値をテストします。

15

ほとんどの場合、キューはprivateであるため、サイズのチェックは機能しません。私が見た「テスト用の設計」ソリューションは、代わりにpackage privateメソッドとメンバーを使用することです。 junitテストは同じパッケージに含まれている可能性が高いため、アクセスできるようになります。

それだけで、「queue.length()」の副作用テストが機能します。

しかし、さらに先に進みます。実際、メソッドがcorrectページとリンクをキューに挿入したことを確認することを検討する必要があります。その詳細には、ページとリンクをどのように表現(および結合)するかについての詳細な知識が必要です。

jMockのソリューションも非常に優れていますが、実際には、独自のテストハーネスの作成に精通しています。

3
CPerkins

JMockライブラリを使用して、キューを保持するstorageをモックします。jMockは、モックされたメソッドが呼び出されたかどうか、どのパラメータで呼び出されるかをアサートできます。

0

だから-メソッドに渡された値がキューに追加されている場合、メソッドの呼び出し後にキューを確認してください。これには、キュー(getQueue()など)にアクセスする必要があります。

0
Mnementh

次のことを確認する方法は2つあります。

  1. 以下のプログラムのように、キュー/コレクションのサイズを使用して確認します:(パトリックが指摘したように)

    @Test
    public void testfollowlinkAdd() {
      int size = queue.length();
      queue.add(pageLink);   //Considering an Object of PageLink
      Assert.assertTrue(size+1, queue.length());
    }
    

OR

  1. MockObjectsを使用します。ここではMockitoのようなフレームワークが役立ちます。
0
subodhkarwa