switch 语句的条件覆盖

Condition coverage on switch statement

当我 运行 覆盖我的代码时:

  private static String mapMyVal(String val) {
    switch (val) {
      case "foo":
        return "FOO_FOO";
      case "bar":
        return "BARR";
      default:
        throw new InvalidArgumentException();
    }
  }

当我 运行 我的单元测试覆盖范围时,我看到“10 个条件中有 8 个被覆盖”。但是,我看到声明中涵盖了所有三行。

既然除了"foo"、"bar"等其他条件就没有了,那么少了两个条件是什么?

我看到一种可能的情况没有涉及。输入 val 可能是 null。在这种情况下,您的 switch 语句将抛出 NullPointerException。要解决此问题,您可以在方法的开头添加 null 检查。

private static String mapMyVal(String val) {
    switch (val) {
        case "foo":
            return "FOO_FOO";
        case "bar":
            return "BARR";
        default:
            throw new InvalidArgumentException();
    }
}

已经有人在问几乎相同的问题了。总的来说,由于 java 处理开关案例的方式,对开关案例进行 100% 的单元测试可能纯粹是运气。看这里