单元测试应该使用'抛出异常'默认情况下?

时间:2017-10-31 16:39:39

标签: java android unit-testing android-studio junit

换句话说,我应该将throws Exception附加到我的所有或大部分单元测试中吗?使用Android Studio生成单元测试时(命令N - >测试方法),默认情况下会添加throw异常。例如:

@Test
public void someMethod() throws Exception {

}

2 个答案:

答案 0 :(得分:1)

我认为不能强制要求每个测试用例都要抛出Exception

对于抛出特定异常的代码(即异常构成公共合同的一部分),您会希望测试用例能够解决这些特定的异常路径,并且使用根Exception可能会导致断言被降级为某些内容简单化。或许类似于测试一种方法,该方法通过简单地声明返回任何数字来计算数字,而不是声明返回正确的数字。

此外,对于抛出已检查异常的代码,throws Exception的默认语句将屏蔽被测代码抛出的特定的已检查异常。在编写测试时,这会给你一个有价值的提示或线索。例如,以下代码......

public void someMethod throws SomeMethodFailedException {
    ...
}

...可能会受益于一个测试用例,该测试用例显式测试引发SomeMethodFailedException的路径。如果默认情况下没有使用throws Exception声明您的测试用例,那么编译器将有效地提醒您测试引发SomeMethodFailedException的路径。

因此,总而言之,声明抛出Exception的所有测试可以(无论是否有意)导致您的测试用例一边踩到异常合同或忽略异常路径,一般来说,这些策略都不会desireable。

当然,上面描述的问题不是用throws Exception声明的不变结果,因为你可以在测试异常路径的同时获得该声明但是在所有测试中使用throws Exception都暗示了(和可能鼓励或验证一种不将异常路径视为有意义的测试场景的测试方法。

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

答案 1 :(得分:0)

您不应该在测试中经常使用异常,事实上您根本不应该使用它们(在大多数情况下)。

单元测试适用于您的功能,以确保它们按照您想要的方式工作!

所以你应该找到一种用断言测试你的函数的方法,这将是一个更清晰有效的测试。