gpt4 book ai didi

java - JUnit @Rule 预期异常

转载 作者:行者123 更新时间:2023-11-29 04:49:25 25 4
gpt4 key购买 nike

我一直在尝试使用 JUnit 预期异常来验证我自己的应用程序异常,但是每当我尝试使用它时,编译器都会提示存在未捕获的异常。

@Rule public ExpectedException invalidInputException1= ExpectedException.none();
@Test (expected = WarehouseException.class)
public void testRunProblem_withInvalidInput1() {
System.out.println("Warehouse Problem: "+INVALID_INPUT_EXAMPLE1);
Warehouse instance = new Warehouse();
instance.setDefault();
invalidInputException1.expect(WarehouseException.class);
invalidInputException1.expectMessage("ERROR - INVALID INPUT: "+INVALID_INPUT_EXAMPLE1+Errors.INVALID_INPUT_TEXT_EMPTY);


throw new WarehouseException("");
}

问题发生在 throw new WarehouseException("") 上,它只是提示以下内容:

enter image description here

关于该方法应该处理 JUnit Javadoc 上的异常这一事实的进一步争论使我尝试了所要求的,结果如下:

enter image description here

enter image description here

这里我能想到的所有错误是 Java 在 JUnit 可以访问它以评估它之前处理异常,从而忽略了我在测试期间期望异常的事实。

最佳答案

ExpectedException 并不能使您免于声明(或捕获,但在本例中,您想要声明)该异常,如果它是“已检查”异常(换句话说,如果它没有扩展 RuntimeException)。换句话说,您的方法必须如下所示...

public void testRunProblem_withInvalidInput1() throws WarehouseException {
...
}

ExpectedException 只处理你的测试用例(“不要失败,如果 WarehouseException 被抛出,但只有当它没有被抛出时,等等。”),等等,但方法本身必须是正确的Java,如果您抛出一个已检查的异常,您必须捕获或声明它,这是 Java 的要求。在这种情况下,您需要声明它 - 因为它将被抛出然后被 ExceptedException 捕获(它有效地包裹在您的测试用例方法周围,这就是那些测试规则的工作方式)。

@Test 注释方法可以有任何你想要的 throws 声明,这完全没问题。如果不使用 ExpectedException TestRule@Test(expected=...),任何实际抛出的异常都会导致测试方法失败当然有错误。但是 throws 只是声明哪些异常可以被抛出,并不意味着它们必须被抛出。

讨论后编辑:还有一点是,ExpectedException 规则和 @Test(expected=...) 表现不佳彼此之间不应一起使用 - 只能使用其中之一,否则其中之一(规则)将失败。

关于java - JUnit @Rule 预期异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com