Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在try-catch块之后无法测试不可访问的返回语句_Java_Spring Boot - Fatal编程技术网

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
块中的任何操作。所以它继续到最后一行。