有没有办法测试 Java 方法不会抛出特定类型的异常?

Is there a way to test that a Java method does not throw a specific type of exception?

我只是在查看 JUnit 文档中的 assertDoesNotThrow() here。我知道您可以使用 assertThrows() 指定异常类型,但从文档中可以看出您不能使用 assertDoesNotThrow() 来指定异常类型。这有什么特别的原因吗?例如,如果你想证明一个方法不会抛出 ParseException,你会怎么做?

编辑:我应该把“在给定特定参数时不抛出 ParseException”,例如“你好”。

Java 测试的 默认 是断言函数不会抛出。您不需要为此做任何额外的工作;你只需要做额外的工作让它抛出。

测试方法不会抛出 ParseException,运行 它。就这些了。

试图证明一个方法不会抛出异常就像说紫色独角兽不存在一样。必须检查宇宙中的每个点才能证明这一点。另一方面,如果您检查了紫色独角兽可能居住的地方,但没有看到它们,您可以近似并告诉它们在这种情况下不存在。

因此,在测试方法以查看它们是否按预期运行时,您测试边缘情况和边界条件。对于其中一些情况,您希望您的方法抛出异常,因此 assertThrows().

除此之外,possible/meaningless 试图证明一个方法不会在 Java 中抛出异常。因为你无法证明一个方法是纯粹的,即每次你 运行 它的行为都完全相同。