JUnit测试具有多个(不同)参数的预期异常

时间:2016-10-11 13:26:31

标签: java testing junit

我有一个带有Address类的Java程序,它应该包含一个zip / postal代码,基本上格式为\ d {4} [A-Z] {2}。这段代码抛出一个自定义(已检查)的IncorrectPostcodeException,我想用JUnit测试它。看看其他问题,我发现了如何测试是否确实抛出了正确的异常。

我现在想用多个参数运行测试。为了确保测试按预期工作,我添加了一个错误的'邮编也是如此,所以测试应该失败。如果我使用常规方法尝试此操作,它会按预期工作,并且下面的测试失败,因为seconde邮政编码不正确。

@Test
public void testPostcode() throws IncorrectPostcodeException {
Address correctPostcode = new Address();
correctPostcode.setPostcode("1234AB");
correctPostcode.setPostcode("12"); // THIS SHOULD FAIL THE TEST
}

但是,如果我以类似的方式编写异常测试,则测试不会失败:

@Test(expected=IncorrectPostcodeException.class)
public void testPostcodeException() throws IncorrectPostcodeException {
Address wrongPostcode = new Address();
System.out.println("1");
wrongPostcode.setPostcode("123AB"); // throws exception as expected
System.out.println("2");
wrongPostcode.setPostcode("1234AB"); //THIS SHOULD FAIL THE TEST
System.out.println("3");
wrongPostcode.setPostcode("123ABC"); // should throw exception too but is not reached
}

如果我将第二个邮政编码作为第一个或唯一的测试用例,则测试会按预期失败。但是为“调试”添加的println语句确实表明只执行了第一行。

如何使用多个输入参数使JUnit测试异常,而无需为每个测试用例编写单独的方法?我寻找答案,但其他问题似乎与在一个方法中测试多个不同的异常有关,而不是在一个异常中测试多个参数。

1 个答案:

答案 0 :(得分:0)

在您的测试中,您将使用“123AB”抛出异常。 测试结束于此。 其他方法(用其他数据设置邮政编码,系统输出......)不会被执行。

如果你想检查其他情况,他们应该在其他测试案例中。

您可以尝试进行2次参数化测试,其中一次测试包含所有常见情况,另一次测试包含所有例外情况。