Java 在try-catch块之后无法测试不可访问的返回语句
我写了一个布尔函数Java 在try-catch块之后无法测试不可访问的返回语句,java,spring-boot,Java,Spring Boot,我写了一个布尔函数 public boolean func(String someString) { try { if (someCondition) { return true; } } catch (Exception e) { return false; } return false; } 然而,最后一次返回是无法到达的。但我写它是为了满足函数。 当我为这个函数编写测试用例时,
public boolean func(String someString) {
try {
if (someCondition) {
return true;
}
} catch (Exception e) {
return false;
}
return false;
}
然而,最后一次返回是无法到达的。但我写它是为了满足函数。
当我为这个函数编写测试用例时,无法在上面的代码中涵盖最后一次返回。那么有没有办法修改函数来删除无法访问的代码呢。
提前谢谢你。这样做:
public boolean func(String someString) {
boolean bool=false;
try {
if (someCondition) {
bool=true
}
} catch (Exception e) {
e.printStackTrace()
}
return bool;
}
在try块中向上移动return,如下所示:
public boolean func(String someString) {
try {
if (someCondition) {
return true;
}
return false;
} catch (Exception e) {
return false;
}
}
最后一次返回是无法到达的
这是不正确的
仔细考虑最后一次返回的时间。只有在以下情况下才能到达:
不会引发异常(否则它将在try
中返回),并且李>catch
- 它不会在
中返回。(或者用更专业的术语来说,“正常完成try
块”)try
try
?因为有一个if
语句,而没有else
,所以只有someCondition
为true时,它才会在try
中返回。如果someCondition
为false,则try
块将正常完成,并将到达最后一次返回
您只需要考虑一个测试用例,
someCondition
为false 如果someCondition
的计算结果为false
,则可以在try catch
块中或从中写入return
语句,即last return
。不需要在这两个位置都写入。@a捕获块中的返回仅在捕获异常时返回。但是,如果没有异常,那么结尾的返回仍然是必需的,并且如果的条件不正确,那么的条件是不正确的。如果假定它不可访问,那么为什么要执行测试?使用空白的catch语句是不好的。我建议,至少,做“e.printStackTrace();”为什么?它写得很好,当出现异常时,OP似乎希望返回false,而不进行堆栈跟踪。OP只需要一个测试用例来覆盖someCondition
不为true时的情况,但没有例外。无论何时在任何代码之间放置return,那么块的其余部分总是无法访问!!所以这不应该是个问题,这是不正确的。只有当您在指向该代码的所有路径中放置返回时。在OP的代码中,最终返回是可到达的。尝试逐行执行,考虑<代码> SoeMeave<代码>为<代码> false <代码>。因此,它不会在if
中执行返回。而且也没有例外,因此它不执行catch
块中的任何操作。所以它继续到最后一行。