genericsと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);
}
私はGSONからクラスキャストエラーが出るので、TypeTokenが正しく動作していないことが表示されます。
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問題ありませんに感謝します。 –