パラメータ化されたテストで例外をテストするにはどうすればよいですか? 質問する

パラメータ化されたテストで例外をテストするにはどうすればよいですか? 質問する

JUnit4 では、1 つのメソッドでパラメータ コレクションを提供し、それをテストのコンストラクターに渡して別のメソッドでテストすることで、パラメータ化された単体テストを作成できます。例外がスローされることが予想されるパラメータがある場合、それをどのように指定すればよいでしょうか。

ベストアンサー1

これは、予想される例外を伴う Junit パラメーター化テストを使用する方法です。

@RunWith(Parameterized.class)
public class CalcDivTest {

@Parameter(0)
public int num1;
@Parameter(1)
public int num2;

@Parameter(2)
public int expectedResult;

@Parameter(3)
public Class<? extends Exception> expectedException;
@Parameter(4)
public String expectedExceptionMsg;

@Rule
public ExpectedException thrown = ExpectedException.none();

@Parameters
public static Iterable<Object[]> data() {
    return Arrays.asList(new Object[][] {
        // calculation scenarios:
        { 120, 10, 12, null, null }, // simple div  
        { 120, 0, -1, ArithmeticException.class, "/ by zero" }, // div by zero          
    });

}

@Test
public void testDiv() throws CCalculationException {

    //setup expected exception
    if (expectedException != null) {
        thrown.expect(expectedException);
        thrown.expectMessage(expectedExceptionMsg);
    }

    assertEquals("calculation result is not as", expectedResult, div(num1, num2) );

}

private int div(int a, int b) {
    return a/b;
}
}

おすすめ記事