예, 익명의 내부 클래스 때문입니다.
PowerMockito.whenNew(TypeReference.class).withNoArguments()
.thenReturn(mockTypeReference);
을하지만 실제로 만드는 것은 TypeReference 아닌 TypeReference 자체를 확장 익명의 클래스입니다 : 특히, new TypeReference
에 전화를 대체 할 PowerMockito에게이에 가고
Map<String, Object> map = mapper.readValue(
json, new TypeReference<Map<String, Object>>() {});
특히 까다 롭습니다. 내 일반적인 조언은 여기에 TypeReference와 같은 "don't mock data objects"이 있는데, 이는 반사에 크게 의존하는 토큰/값/데이터 객체가 아니기 때문에, Guice와 Guava의 사촌들도 그렇습니다. doesn't support equals
; 테스트에서 자신의 실제 TypeReference를 만들고 클래스의 실제 값과 eq
을 비교할 수는 없습니다.
당신은 아직도 모의 TypeReference,하지만 당신은 또한 당신이 그것에 대하여 주장하는 방식을 조정해야한다
: 잭슨 당신이 할 수있는 경우
가
- 이 명명 된 동등한 익명 TypeReference 서브 클래스를 추출하고 사용
isA
을 입력하여 유형을 확인하십시오.
- 보이는 상수에 TypeReference를 추출하고 그 참조 평등을 확인하십시오.
Captor
을 사용하고 나중에 반영을 사용하여 TypeReference의 제네릭 유형을 확인하십시오.
- 기술적 인 측면에서
Matchers
클래스 인 Mockito.<TypeReference<Map<String, Object>>>any()
으로 전환하거나 최신 버전의 Mockito에서는 ArgumentMatchers
으로 전환하십시오. 이 값은 어쨌든 변경되지 않으므로 PowerMock을 설득하는 것보다 실제적으로 시스템 및 테스트가 수표 무시로 인해 읽기 쉽고 강력해질 수 있습니다.
- 당신이 할 수있는 곳이라면 어디에서든지 실제 의존성을 사용하고 구현이 올바른 방식으로 올바른 공동 작업자와 상호 작용하는 것이 아니라 함수가 작동 하는지를 확인하는 것이 이상적입니다. 어쨌든 당신이 일하는 기능이 있습니다. 맞습니까?
감사합니다. Mockito로 전환했습니다.>> any()가 작동합니다. –
Saurabh