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% 的单元测试可能纯粹是运气。看这里
当我 运行 覆盖我的代码时:
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% 的单元测试可能纯粹是运气。看这里