JUnit4 では、1 つのメソッドでパラメーター コレクションを提供することにより、パラメーター化された単体テストを記述できます。これは、テストのコンストラクターに渡され、別のメソッドでテストされます。例外がスローされることが予想されるパラメーターがある場合、どのように指定すればよいですか?
17231 次
7 に答える
30
これは、予想される例外で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;
}
}
于 2016-03-27T13:13:10.100 に答える
8
他の提案とは対照的に、私はテストにいかなる種類のロジックも導入しません - 単純な if でさえも!
必要なのは、2 つのテスト方法です。
- 最初のものは有効なパラメーターを受け取ります (そして、いくつかの出力を期待します)
- 2 番目は無効なパラメーターを受け取ります (例外が予想されます)
コンストラクターベースのパラメーター化されたテストを使用する JUnit がこれを実行できるかどうかはわかりません。おそらく、これには 2 つのテスト クラスを作成する必要があります。はるかに便利なソリューションを提供する JUnit Params または TestNG を使用してください。
于 2012-09-20T18:48:55.523 に答える
5
if (parameter == EXCEPTION_EXPECTED) {
try {
method(parameter);
fail("didn't throw an exception!");
} catch (ExpectedException ee) {
// Test succeded!
}
}
于 2010-11-11T08:33:37.280 に答える
0
JUnit4 の対応するアノテーションとルールの代わりにcatch-exceptionを使用した場合、コードは次のようになります。
catchException(obj).method(parameter);
if (parameter != EXCEPTION_EXPECTED) {
assert caughtException() instanceof ExpectedException;
}
// more assertions
于 2012-06-22T17:26:33.857 に答える
0
@Test(expected = Exception.class)
@Parameters(value = { "invalidInput1", "invalidInput2" })
public void shouldThrowOnInvalidInput(String input) {
ClassToTest.methodToTest(input);
}
junitparamsライブラリの junitparams.Parameters を使用します。
于 2020-07-14T09:06:59.233 に答える