Java 如何保存异常以便将其作为对象传递给函数?

Java 如何保存异常以便将其作为对象传递给函数?,java,exception,Java,Exception,我试图对参数为异常的函数进行单元测试。然而,似乎因为函数只抛出异常而不返回,所以我不能只提供一个会抛出异常的函数和参数 如何处理这个问题?您可以添加一个try-catch子句,其中包含您希望抛出的异常,catch子句中有一个pass,catch子句后有一个fail。主要的单元测试框架支持验证异常 考虑这种方法: public boolean throwIfBlank(String input) { if(input == null || input.trim().isEmpty()) {

我试图对参数为异常的函数进行单元测试。然而,似乎因为函数只抛出异常而不返回,所以我不能只提供一个会抛出异常的函数和参数


如何处理这个问题?

您可以添加一个try-catch子句,其中包含您希望抛出的异常,catch子句中有一个pass,catch子句后有一个fail。

主要的单元测试框架支持验证异常

考虑这种方法:

public boolean throwIfBlank(String input) {
    if(input == null || input.trim().isEmpty()) {
        throw new IllegalArgumentException("Input should not be blank.");
    }
    return true;
}
对于JUnit4,您可以使用@Test注释的预期属性。如果没有抛出异常,那么单元测试将失败

// JUnit 4
@Test( expected = IllegalArgumentException.class )
public void testBlankStringThrowsException() {
  classUnderTest.throwIfBlank("");
  // test will automatically fail if exception is NOT thrown
}
类似地,在JUnit 5中,您可以:

最后,使用TestNG的@Test注释验证是否引发了特定异常:

@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);
  }
}

您好,您是否介意提供您正在谈论的代码,这将帮助我们帮助您。显示代码请JUnit4:@Testthrows=ExpectedException.class和JUnit5:assertThrows。。。两者似乎都使你的“我不能做”这个前提无效。@Makoto-为了完整起见,你能链接到TestNG副本吗?这是另一个主要的测试框架。这一个应该是可以接受的目标:@roddyoffrozenpeas:是的,好的。
@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);
  }
}