我正在尝试对参数为异常的功能进行单元测试。但是,似乎因为该函数仅引发异常而没有返回,所以我不能仅提供会引发异常的函数和参数。
我该如何处理?
答案 0 :(得分:-1)
您可以添加一个try-catch子句,该子句带有您希望引发的异常,在catch子句中带有pass
,在catch子句之后带有fail()
。
答案 1 :(得分:-1)
主要的单元测试框架支持验证异常。
考虑此方法:
public boolean throwIfBlank(String input) {
if(input == null || input.trim().isEmpty()) {
throw new IllegalArgumentException("Input should not be blank.");
}
return true;
}
对于JUnit 4,您可以将expected
批注的@Test
属性用于verify that an exception is thrown。如果未抛出异常,则单元测试将失败。
// JUnit 4
@Test( expected = IllegalArgumentException.class )
public void testBlankStringThrowsException() {
classUnderTest.throwIfBlank("");
// test will automatically fail if exception is NOT thrown
}
类似地,在JUnit 5中,您可以explicitly assert that something is thrown using assertThrows
:
@Test
void testBlankStringThrowsException() {
assertThrows(IllegalArgumentException.class, () -> classUnderTest.throwIfBlank(""));
}
最后,通过TestNG的@Test
批注supports a variety of attributes来验证是否抛出了特定的异常:
@Test(
expectedExceptions = IllegalArgumentException.class,
expectedExceptionsMessageRegExp = "Input should not be blank."
)
public void testBlankStringThrowsException {
classUnderTest.throwIfBlank("");
}
当然,您总是可以将测试方法包装在try-catch
块中,如果不抛出异常,则可以显式调用fail()
;通常,不需要这种老式的方法,而是为了完整性:
@Test
public void testBlankStringThrowsException() {
try {
classUnderTest.throwIfBlank("");
fail("Blank string should have thrown an IllegalArgumentException!");
} catch (IllegalArgumentException e) {
// expected
} catch (Exception e) {
fail("Expected an IllegalArgumentException but threw: " + e);
}
}