首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JUnit @Rule ExpectedException

JUnit @Rule ExpectedException
EN

Stack Overflow用户
提问于 2016-03-13 11:47:25
回答 2查看 7K关注 0票数 2

我一直试图使用JUnit预期的异常来验证我自己的应用程序异常,但是每当我尝试使用该异常时,编译器都会抱怨存在一个未被发现的异常。

代码语言:javascript
复制
@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("")上,它只是抱怨以下几个方面:

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

我认为这里的所有错误是,在JUnit访问异常以评估异常之前,Java正在处理异常,从而忽略了我期望在测试期间出现异常的事实。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-13 14:43:31

如果ExpectedException是“选中”的异常(换句话说,如果它不是扩展RuntimeException),它并不能免除声明(或捕获)的需要,但在本例中,您希望声明该异常。换句话说,你的方法必须是这样.

代码语言:javascript
复制
public void testRunProblem_withInvalidInput1() throws WarehouseException {
...
}

ExpectedException只处理您的测试用例(“如果抛出WarehouseException时不要失败,但是只有当它没有被抛出,等等”),但是方法本身必须是正确的,如果您抛出一个检查过的异常,您必须捕获或声明它,这是Java的要求。在本例中,您希望声明它--因为它将被抛出,然后被ExceptedException捕获(它实际上围绕着您的测试用例方法,这些测试规则就是这样工作的)。

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

编辑():另一点是,ExpectedException规则和@Test(expected=...)之间不友好,不应该一起使用--只有其中一个,否则其中一个(规则)就会失败。

票数 5
EN

Stack Overflow用户

发布于 2016-03-13 14:44:07

您需要在方法声明中添加throws WarehouseException

代码语言:javascript
复制
public void testRunProblem_withInvalidInput1() throws WarehouseException {

由于此方法可以抛出选中的异常,因此必须在此方法中捕获它,然后抛出到调用堆栈,尽管这是唯一的测试方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35971607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档