generics 및 TypeTokens를 사용하여 JSON을 deserialize하는 서비스 코드가 있습니다. 이 서비스는 generic 매개 변수 유형을 유지하는 복잡한 TypeToken을 deserialize하는 데 필요합니다.복잡한 유형 토큰의 올바른 구성을 단위 테스트 할 수 있습니까?
<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()을 테스트하고 올바른 클래스를 얻지 만 generic 유형을 테스트하는 방법을 모르겠습니다.
@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 문제 없습니다. –