我正在努力为我正在处理的图书馆获得100%的代码覆盖率,而且我似乎在切换声明和覆盖范围方面存在一些问题,我根本不理解。
我目前正在使用Jacoco 0.7.2,因为每个新版本似乎都与Robolectrics打破。
我测试了一个简单的switch语句:
public enum Type {
NONE, LEGACY, AKS
}
private static Class<?> getCipherClass(Type type) {
switch (type) {
case LEGACY:
return CipherWrapperLegacy.class;
case AKS:
return CipherWrapperAks.class;
default:
return null;
}
}
我写的测试包含以下检查(我必须使用反射,因为方法是私有的):
final CipherWrapper instance = CipherWrapper.createInstance(mockContext, CipherWrapper.Type.LEGACY, ALIAS);
assertNotNull(instance);
Method getCipherMethod = TestUtils.makeMethodAccessible(CipherWrapper.class, "getCipherClass", CipherWrapper.Type.class);
assertNull(getCipherMethod.invoke(instance, CipherWrapper.Type.NONE));
assertEquals(CipherWrapperAks.class, getCipherMethod.invoke(instance, CipherWrapper.Type.AKS));
assertEquals(CipherWrapperLegacy.class, getCipherMethod.invoke(instance, CipherWrapper.Type.LEGACY));
结果不符合我的预期:
图像有点混乱,因为黄线表示缺少某些东西。绿色图标告诉我3个分支中有3个被覆盖。
我还测试了使用case NONE
延长开关盒的情况,但没有改变。
我唯一能做的就是用if / else替换开关,然后我获得100%的覆盖率。
答案 0 :(得分:1)
如果调用方法不喜欢你输入一个匿名变量:
getCipherMethod.invoke(instance, (CipherWrapper.Type) null);
然后使用命名变量尝试:
CipherWrapper.Type nullType = null;
getCipherMethod.invoke(instance, nullType);
此外,您应该检查调用异常是否只是包装因调用方法而导致的异常,而不是调用本身的错误。