单元测试应该默认使用“抛出异常”吗?

2024-04-25

换句话说,我应该附加throws Exception我的所有或大部分单元测试?当您使用 Android Studio 生成单元测试(命令 N -> 测试方法)时,它默认添加抛出异常。前任:

@Test
public void someMethod() throws Exception {

}

我不认为可以提出令人信服的理由来要求每个测试用例都被声明为抛出Exception.

对于引发特定异常的代码(即异常构成公共合约的一部分),您希望测试用例能够解决这些特定异常路径并使用根Exception可能会导致断言被降级为简单化的东西。也许类似于测试一个方法,该方法通过简单地断言返回任何数字而不是断言correct返回号码。

此外,对于引发已检查异常的代码,默认语句为throws Exception将屏蔽被测试代码抛出的特定的、已检查的异常。这会让您在编写测试时得不到有价值的提示或线索。例如,下面的代码...

public void someMethod throws SomeMethodFailedException {
    ...
}

...可能会受益于明确测试路径的测试用例SomeMethodFailedException被抛出。如果您的测试用例默认情况下未声明throws Exception那么编译器将有效地提醒您测试路径SomeMethodFailedException被抛出。

因此,总而言之,声明所有测试要抛出Exception可能(无论有意或无意)导致您的测试用例侧步异常契约或忽略异常路径,一般来说,这些策略都不是可取的。

当然,上述问题并不是声明的必然结果。throws Exception因为您可以在声明的同时测试异常路径,但使用throws Exception在所有测试中确实暗示(并且可能鼓励或验证)不将异常路径视为有意义的测试场景的测试方法。

如果您担心 Android Studio 中的默认模板以这种方式创建测试,那么您可以更改该默认值或创建您自己的“测试方法”快捷方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试应该默认使用“抛出异常”吗? 的相关文章

随机推荐