Я столкнулся с следующим выпуском, когда я писал тесты Junit с использованием Mockito. Мой тест вызывает методы для реального объекта вместо mock объекта, и я получаю NullPointerException. Вот мой код:Метод вызова на реальный объект вместо вызова объекта Mock
public class JSFUtilsTest {
public JSFUtilsTest() { }
JSFUtils jsfUtils = mock(JSFUtils.class);
FacesContext facesContext = ContextMocker.mockFacesContext();
ExternalContext extContext = mock(ExternalContext.class);
Application app = mock(Application.class);
ExpressionFactory exFactory = mock(ExpressionFactory.class);
ELContext elContext = mock(ELContext.class);
ValueExpression valExp = mock(ValueExpression.class);
@Test
public void testResolveExpression() {
when(jsfUtils.resolveExpression("expression")).thenAnswer(new Answer<Object>(){
public Object answer(InvocationOnMock invocation){
when(facesContext.getApplication()).thenReturn(app);
when(app.getExpressionFactory()).thenReturn(exFactory);
when(facesContext.getELContext()).thenReturn(elContext);
when(exFactory.createValueExpression(elContext, "expression", Object.class)).thenReturn(valExp);
when(valExp.getValue(elContext)).thenReturn(anyObject());
return valExp.getValue(elContext);
}
});
jsfUtils.resolveExpression(anyString());
verify(jsfUtils).resolveExpression(anyString());
assertNotNull(jsfUtils.resolveExpression(anyString()));
}
}
Вместо вызова resolveExpression() на Мок, я получил вызов на объект JSFUtils. JSFUtils.java и JSFUtilsTest.java находятся в разных пакетах. Кто-нибудь может мне помочь? Заранее спасибо!
Это выглядит очень смущен, чтобы быть. Как правило, вы можете настроить свои mocks, используя 'when' и' anyString() ', но затем вы будете вызывать методы с фактическими строками. Кажется, ты делаешь это назад. Кроме того, я не уверен, почему ваш метод 'Answer' делает более сложную настройку' when'. Я не понимаю, как вы собираетесь все это работать. – khelwood
Если вы издеваетесь над методом, который вы пытаетесь протестировать, то вы на самом деле его вообще не проверяете. – khelwood
Спасибо за ваш комментарий. Теперь я использую anyString() с if и real string в вызове метода. Но у меня все еще есть проблема с NullPointerException – Slava