0

興味深い要件があります。アプリケーションのテスト ケース カバレッジを可能な限り改善したいと考えています。パラメータ化された Junit を使用して、多数の異なる入力でテストケースを実行しています。サンプル テスト クラスは次のようになります。

@Parameters
public static Collection<Object[]> testInputs()
{
    return Arrays.asList({
        {1, CoreMatchers.is(1)},
        {2, CoreMatchers.is(2)}
    });
}
@Test
public test()
{
    myApp.run(); 
    assertThat(myApp.getA(), matcher);
}

このようにして、テスト パラメーターを使用してアサーション ロジックを定義しました。テストケースで複数のマッチャーを実行したいのですが、そのうちのいくつかは私が書いたカスタムマッチャーにすることができます。

@Parameters
public static Collection<Object[]> testInputs()
{
    return Arrays.asList({
        {1, Arrays.asList( CoreMatchers.is(1), CustomMatchers.status(1) ) },
        {2, Arrays.asList( CoreMatchers.is(2), CustomMatchers.status(2) ) }
    });
}

そして、アサーションは次のようになります。

for(Matcher<MyApp> matcher: matchers)
{
    assertThat(myApp, matcher);
}

しかし問題は、両方のマッチャーが異なるオブジェクトで実行されることです。CustomMatcher を定義する最良の方法は何ですか??

マッチャーのタイプによってアサーションを分類する必要がありますか?

助けていただければ幸いです。前もって感謝します。

4

2 に答える 2

1

何を求めているのかよくわかりませんがjava.lang、パラメーターとしてJUnitオブジェクトよりも純粋なオブジェクトを使用する方がよいと思います。それで

return Arrays.asList({
    {1, 1},
    {2, 2}
});

is実際のテストではマッチャーを使用します。

マッチャーが実際に異なることをしている場合は、パラメーター化されたテストを使用せず、別のテスト方法を使用してください。重複を減らすには、通常のリファクタリングツールを使用して、テストメソッド間で共通のメソッドを抽出します。

于 2012-09-14T10:25:11.363 に答える
1

「両方のマッチャーが異なるオブジェクトで実行される」とはどういう意味かわかりませんが、CoreMatchers.allOf. この方法では、マッチャーのリストをループする必要がなく、1 つを含む任意の数のマッチャーを渡すことができます。

@Parameters
public static Collection<Object[]> testInputs()
{
    return Arrays.asList({
        {1, CoreMatchers.allOf( CoreMatchers.is(1), CustomMatchers.status(1) ) },
        {2, CoreMatchers.allOf( CoreMatchers.is(2), CustomMatchers.status(2) ) }
    });
}
于 2012-09-14T20:58:18.410 に答える