#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