2016-11-30 2 views
1

Мой метод оказывает следующую строку -Как бросить фиктивный объект с помощью PowerMockito

ObjectMapper objectMapper = new ObjectMapper(); //1 
JsonNode root = objectMapper.readTree(details); //2 
((ObjectNode) root).put("userId", userId); //3 

Я пытаюсь написать заглушку для выше линии № 3 и он получает неудачу, говоря ClassCastException -

@Mock 
JsonNode    mockJsonNode; 

@Mock 
ObjectNode    mockObjectNode; 

ObjectMapper mockMapper = PowerMockito.mock(ObjectMapper.class); 
PowerMockito.whenNew(ObjectMapper.class).withNoArguments().thenReturn(mockMapper); 
PowerMockito.when(mockMapper.readTree(Matchers.anyString())).thenReturn(mockJsonNode); 
PowerMockito.when(mockObjectNode.put(Mockito.anyString(), Mockito.anyString())).thenReturn(mockObjectNode); 

Я понимаю, как его исключение, потому что нет никакого отношения между макетным объектом и фактическим объектом, но каков способ записи заглушки для строки # 3?

Это полное исключение -

java.lang.ClassCastException: com.fasterxml.jackson.databind.JsonNode$$EnhancerByMockitoWithCGLIB$$26691c0b cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode 

ответ

2

Вы объявили

JsonNode    mockJsonNode; 

Так что ваши рамки насмешливый убедитесь, что mockJsonNode является "именно" этого типа JsonNode.

Имейте в виду: a cast - это не что иное, как рассказывать компилятору «он, вы, компилятор, тот объект X, который, по вашему мнению, имеет тип Y, на самом деле он имеет тип Z». Для выполнения этой работы X фактически должен быть Z во время выполнения.

Таким образом, простое решение могло бы изменить эту декларацию:

ObjectNode mockJsonNode 

Другими словами: ваш код продукции assumess, что результат, возвращаемый readTree() на самом деле является экземпляром ObjectNode. Тогда, конечно, вы должны убедиться, что ваша издевательская структура фактически возвращает то, что является ObjectNode.

+0

О, это работает ... вы спасли мое время. Благодарю. – Saurabh

+0

Вы очень желанны! – GhostCat

Смежные вопросы