gpt4 book ai didi

java - 在 JUnit 测试中抛出所有异常是不好的做法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:41 25 4
gpt4 key购买 nike

我没有在我的 JUnit 测试中进行异常处理,我只是用 ...throws Exception 声明我的测试方法?

我开始这样做了,但我看不出我应该更具体的原因。

最佳答案

单元测试的核心方面是帮助您尽快隔离/解决生产代码中的错误。

从这个意义上讲:您编写@Test 方法不是为了被其他方法调用。您编写它们以便 JUnit 框架运行它们。

通常,当该测试抛出异常时;捕捉它是没有意义的(除非它是预期的;并且您想进一步检查该异常)。

因此:没有有catch block ;在 99.999% 的情况下,将潜在的抛出原因添加到您的测试方法签名中是正确的答案。或者可能是 100%;因为我找不到一个好的反例。

但我会小心使用 throws Exception 来快速处理。您仍然希望您的代码尽可能“具体”;所以最好选择 throws ThatExceptionThatCanReallyBeThrown。当该列表经常变得太长时……那么您最好在这方面跟进并检查您的生产代码中的抛出列表是否应该以某种方式“修剪”。

编辑:可能要理解的核心是:对于您的每一个测试,您都对将要发生的事情有一个准确的期望。该方法应该:

  1. 不抛出异常
  2. 抛出一个特定的异常(然后你会做@Test(expected=...)事情
  3. 抛出一个特定的异常......您的测试需要捕获该异常以进行进一步检查
  4. 抛出一个异常……这将表明一个真正的“错误”条件(因为你没有预料到它会发生);在这种情况下,JUnit 将捕获异常并将其作为失败的测试用例报告给您。 (当然,请记住,JUnit 中的测试用例错误和测试失败存在细微差别)。

只需将 throws X, Y 放在您的测试方法签名上就是解决项目符号 2 和 4 的直接方法。

关于java - 在 JUnit 测试中抛出所有异常是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102818/

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