Издевательство над методом, который принимает строку в качестве параметра Mockito

#java #mockito

#java #mockito

Вопрос:

Я пытаюсь издеваться над методом, который принимает String в качестве параметра, на основе строкового значения, которое я хотел вернуть разными значениями, ниже приведен мой пример кода

 when(mockVariableResolver.resolveVariable(
    (FacesContext)anyObject(),      
     Mockito.eq(ProgramConstants.SRCH_PROC_DATA_BEAN))).
thenReturn(searchProcedureCodeDataBean);
 

Разрешаемая переменная metjos принимает объект и строку, объект может быть любым, но второй аргумент должен совпадать, приведенный выше аргумент не сработал.

Редактировать:

Сигнатура для метода resolveVariable

 fc.getApplication().getVariableResolver().resolveVariable(fc,
                                        "#{"   ProgramConstants.SRCH_PROC_DATA_BEAN   "}")
 

Пожалуйста, помогите мне в этом.

Комментарии:

1. Что именно происходит? Ничего? Исключение?

2. Это не соответствует предоставленному методу..

3. Похоже, что информации недостаточно для диагностики проблемы. Итак, вот мои вопросы по умолчанию: является ли метод resolveVariable окончательным? Является ли разрешаемая переменная перегруженной, поэтому неоднозначной? Работает ли это, если вы указываете null и null?

4. Пожалуйста, покажите нам подпись вашего resolveVariable метода. Если вы можете создать автономный пример, демонстрирующий вашу проблему, это было бы полезно (и для нас, и для вас).

5. Ваш вопрос неясен (по крайней мере, для меня). Пожалуйста, предоставьте прототип resolveVariable() и постарайтесь четко объяснить, чего вы хотите достичь. Что должно соответствовать?

Ответ №1:

Основываясь на вашем описании, я бы реализовал его как Mockito.Ответ:

 when(mock.resolveVariable(anyObject(), anyString())).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        String secondArgument = (String) args[1];
        //
        // TODO: make return value depend from secondArgument
        return null;
    }
});
 

Комментарии:

1. Как я могу создать это как метод saparate и вызывать каждый раз, поскольку я должен вызывать это, когда в нескольких местах.

2. преобразуйте анонимный класс в локальный класс

3. Sina72 Спасибо за ответ, если да, то как я могу передать вызов методу ответа??

4. Вызов заполняется фиктивным объектом. Просто добавьте его в when().thenAnswer() .

Ответ №2:

Я предполагаю здесь, но, возможно

 when( mockVariableResolver )
    .resolveVariable( (FacesContext)anyObject(),      
                      Mockito.eq( ProgramConstants.SRCH_PROC_DATA_BEAN ) ) )
    .thenReturn( searchProcedureCodeDataBean );
 

сделает свое дело.

Обратите внимание, что resolveVariable() метод перемещается за пределы списка when() аргументов, который всегда должен быть просто a @Mock .

Приветствия,

Комментарии:

1. Спасибо за ответ, но resolveVariable — это метод в классе mockVariableResolver. Получение ошибки компиляции в методе resolveVariable