Пересмешивая внешний сервис возвращает ноль - PullRequest
0 голосов
/ 11 октября 2018

У меня есть довольно простой Dictionary класс, который вызывает внешний API.

 public class Dictionary {
        protected ExternalService service = new ExternalService();       

        public String getValue(String key, String dictionaryName) {
            ExternalServiceInput input = new ExternalServiceInput();
            ExternalServiceOutput output = new ExternalServiceOutput();

            input.setKey(key);
            input.setDictionaryName(dictionaryName);

            try {
                output = service.invoke(input);
            } catch (Exception e) {         
                return null;
            }       

            return output.getValue();       
        }
    }

Он работает нормально, но я хотел написать для этого модульные тесты, поэтому решил, что мне нужно смоделировать service.invoke().

    @Mock   
    private ExternalService service;        

    @InjectMocks
    private Dictionary dictionary;      
    @InjectMocks
    private ExternalServiceOutput output;
    @InjectMocks
    private ExternalServiceInput input;


    @Before
    public void setUp() throws Exception {      
        MockitoAnnotations.initMocks(this);

        input.setKey("testKey");
        input.setDictionaryName("testDictionary");  
        output.setValue("testValue");           
    }

    @Test
    public void shouldReturnValue() throws Exception {
        when(service.invoke(input)).thenReturn(output);     
        assertEquals(output.getValue(), dictionary.getValue(input.getKey(), input.getDictionaryName()));        
    }

Я пытался использовать Input и Output как обычное поле или инициализировать его в методе setUp, все заканчивается NullPointerException в Dictionary классе в

return output.getValue();

Может кто-нибудь указать мне, что я сделал не так?

1 Ответ

0 голосов
/ 11 октября 2018

Вы должны переопределить equals и hashCode в своем классе ExternalServiceInput или изменить свой макет для принятия любого объекта ExternalServiceInput

when(service.invoke(Mockito.any(ExternalServiceInput.class))).thenReturn(output);
...