我有一些服务代码,使用泛型和TypeTokens来反序列化JSON。需要该服务来反序列化保持其通用参数类型的复杂TypeToken。如何单元测试复杂TypeToken的正确配置?
下面是创建它的代码:
<T extends IPolicy> TypeToken<PolicyWrapper<T>> makePolicyWrapperTypeToken(Class<T> policyClass) {
TypeToken<T> policyTypeToken = TypeToken.of(policyClass);
return new TypeToken<PolicyWrapper<T>>() {}
.where(new TypeParameter<T>() {}, policyTypeToken);
}
看来,TypeToken不能正常工作,因为我从GSON类强制转换错误。
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap
cannot be cast to com.myStuff.IPolicy
它看起来像我调试时正确。 toString()函数表明它知道它的泛型类型参数:
com.myStuff.PolicyWrapper<com.myStuff.PolicyImpl>
最后,我有一个单元测试。它通过但不测试泛型类型参数。我测试了TypeToken的rawType()并获得了正确的类,但我不确定如何测试它的泛型类型。
@Test
public void makePolicyWrapperTypeToken() throws NoSuchMethodException {
TypeToken<?> wrapperToken = makePolicyWrapperTypeToken(PolicyImpl.class);
assertEquals(wrapperToken.getRawType(), PolicyWrapper.class);
//the getContent returns a list but it needs the generic type tested
TypeToken<?> contentToken = wrapperToken.resolveType(PolicyWrapper.class.getMethod("getContent").getGenericReturnType());
assertEquals(contentToken.getRawType(), List.class);
}
我明白了,谢谢 – superbAfterSemperPhi
@superbAfterSemperPhi没问题,欢迎光临。 –