0

@Parametersメソッドのパラメーターに従ってアサート動作を変更することは可能ですか?

Class abcTest
{
  ..
  @Parameters
  public static Collection<Object[]> testParameters()
  {
        return Arrays.asList(new Object[][] {
        {1},{2} 
        });
  }

  ..
  @Test
  public void test()
  {
    ...
    if(num == 1) { assertTrue(..); }
    if(num == 2) { assertFalse(..); }
    ...
  }
}

パラメータを定義するのとまったく同じ方法でアサート動作を定義することは可能ですか?

前もって感謝します。

4

2 に答える 2

4

最も単純なケースでは、 javadocに示すように、期待値をパラメーターとして渡し、それらをアサーションで使用できます。

より複雑なケースでは、アサートロジックをオブジェクトにカプセル化し、それらをパラメータとして渡す必要があります。

同じ値に対して異なるアサーションが必要な場合は、次を使用できassertThat()ますMatcher<T>

class abcTest
{
  @Parameters
  public static Collection<Object[]> testParameters()
  {
        return Arrays.asList(new Object[][] {
            {1, CoreMatchers.is(true)},
            {2, CoreMatchers.is(false)} 
        });
  }

  ..
  @Test
  public void test()
  {
      ...
      assertThat(value, matcher);
  }
}

それ以外の場合、異なるパラメーターが完全に異なるアサーションを必要とする場合は、それらをRunnablesとして渡すことができます。

ただし、この場合、パラメーター化されたテストを使用することはお勧めできません。ケースごとに完全に異なるアサーションが必要な場合は、これらのケースに個別のテストメソッドを作成し、それらの共通部分をヘルパーメソッドに抽出する方が賢明です。

@Test
public void shouldHandleCase1() {
   handleCase(1);
   assertTrue(...);
}

@Test
public void shouldHandleCase2() {
   handleCase(2);
   assertFalse(...);
}
于 2012-09-11T10:39:02.133 に答える
0

最近、zohhakプロジェクトを始めました。書いてみよう

@TestWith({
    "1, true",
    "2, false"
})
public void test(int value, boolean expectedResult) {
  assertThat(...).isEqualTo(expectedResult);
}
于 2012-12-05T16:02:20.990 に答える