Java 宣布';抛出异常';当方法中没有代码会引发选中异常时

Java 宣布';抛出异常';当方法中没有代码会引发选中异常时,java,exception,Java,Exception,我很好奇,如果在一个没有任何代码会抛出选中异常的方法中声明抛出异常,是否有伤害或任何不希望的副作用。特别是单元测试。测试可以这样宣布 @Test void testSomething() throws Exception { ... some test code but none that throw a checked exception ... } 除了在IDE中将代码可视化为未使用之外,还有什么问题 随意添加你知道没有任何作用的代码的主要不希望的副作用是,它会让以后必须维护它的人

我很好奇,如果在一个没有任何代码会抛出选中异常的方法中声明
抛出异常
,是否有伤害或任何不希望的副作用。特别是单元测试。测试可以这样宣布

@Test
void testSomething() throws Exception {
    ... some test code but none that throw a checked exception ...
}

除了在IDE中将代码可视化为未使用之外,还有什么问题

随意添加你知道没有任何作用的代码的主要不希望的副作用是,它会让以后必须维护它的人感到困惑(即使你忘记了为什么要把它放在第一位)。

@Test
方法中这样做没有害处。事实上,对于JUnit来说,这是一个方便的测试方法模板。任何未经处理的、意外的异常都是测试失败,将被正确地报告。通过声明
抛出异常
,在处理使用已检查异常的代码时,不必使用
try catch
块,例如,文件系统上的操作是测试设置的一部分,但不是测试目标


但是,您不应该在普通代码中执行此操作,因为这会迫使调用该方法的人处理异常,这没有任何意义,因为它不会引发异常。

可能的情况是,在编写测试时,您可能会使用引发选中异常的代码:

getClass().getClassLoader().getResource(filePath).toURI();
编译器不会警告您必须处理它,因为您的方法签名具有“抛出异常”。因此,您可能无法处理uri语法不正确的情况。
尽管这是一个很小的问题。

您的示例是一个单元测试方法,但这个问题也适用于其他方法


就我个人而言,我觉得在团队中开发时这种做法令人非常恼火,因为任何想要使用这种方法的人都必须在调用你的方法时捕捉到假想的异常,或者在他们采取简单的方法时将假想的异常从自己的方法中抛出,他们自己也必须变得笨拙。。。知道这不是真正的威胁,并将烦恼传播给其他人。

我同意应用程序代码方法中的无用异常。但在测试方法上,它对我来说是无害的吗?我想,我找不到一个好的解释来解释为什么它在测试中是不好的(除了稍微凌乱的代码),因为大多数人不编写调用单元测试的代码,因此不需要捕捉或声明抛出。