我有一些服務代碼,使用泛型和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沒問題,歡迎光臨。 –