2017-03-28 6 views
0

저는 인스 타 그램의 데이터를 시스템에 매핑하는 독자가 있습니다. Junit 테스트를 수행 할 때 ClassCastException이 발생했습니다. 내 테스트 클래스는 다음과 같은 코드가 있습니다 :ClassCastException : com.fasterxml.jackson.databind.node.MissingNode를 com.fasterxml.jackson.databind.node.ArrayNode로 캐스트 할 수 없습니다.

public class InstagramToJsonMapperTest extends AbstractMapperTest { 

private InstagramMapper instagramMapper; 
private boolean printResult = true; 

@Before 
    public void setup() { 
     super.setup(); 
     instagramMapper = new InstagramMapper(128); 
    } 

    private void compareJson(String unmapped, String mapped) throws Exception { 
     JsonNode unmappedJson = loadJson(unmapped); 
     JsonNode mappedJson = loadJson(mapped); 
     Message<JsonNode> msg = MessageBuilder.withPayload(unmappedJson).build(); 
     Message<JsonNode> resultMsg = instagramMapper.map(msg); 
     JsonNode result = resultMsg.getPayload(); 
     if(printResult) { 
      System.out.println("processed: " + result); 
      System.out.println("expected: " + mappedJson.toString()); 
     } 
     Assert.assertTrue(JacksonUtils.equals(result, mappedJson)); 
    } 

    @Test 
    public void testPhoto() throws Exception { 
     compareJson("/mapping/test.json", "/mapping/test_mapped.json"); 
    } 

} 

오류 때문에 내 매퍼에서이 라인이다 :

String[] branches = JacksonUtils.toArray((ArrayNode) extractor.extract("contentBranch")); 
     if(branches.length == 1) { 
      abc.put("contentBranch", branches[0]); 
     } else { 
      abc.set("contentBranch", JacksonUtils.arrayToArrayNode(branches)); 
     } 

내 문제는, 내가 변경하는 것을 잘 모릅니다. 테스트 파일에서 매퍼 코드 나 코드를 변경해야합니까? 오류 :

ClassCastException: com.fasterxml.jackson.databind.node.MissingNode cannot be 
    cast to com.fasterxml.jackson.databind.node.Arraynode 

답변

1

JsonNode node = extractor.extract("contentBranch")을 사용한 다음 실제 노드 유형이 반환되는지 테스트해야합니다.

귀하의 경우 MissingNode이 (가) ArrayNode (으)로 전송 될 수 없습니다.

if (node instanceof ArrayNode) {...} 
else {...}