Mockito를 사용하여 Junit 테스트를 작성한 후 다음 호에 직면했습니다. 내 테스트 대신 실제 객체에 대한 메소드를 호출하고 객체를 모의하고 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()));
}
}
대신 Mock에서 resolveExpression()을 호출하면 JSFUtils 객체가 호출됩니다. JSFUtils.java와 JSFUtilsTest.java는 다른 패키지에 있습니다. 아무도 나를 도울 수 있습니까? 미리 감사드립니다!
. 일반적으로 여러분은'when'과'anyString()'을 사용하여 모의 객체를 설정할 수 있습니다. 그러나 실제 문자열로 메소드를 호출 할 것입니다. 당신은 거꾸로하고있는 것 같습니다. 또한 왜 당신의'Answer' 방법이 더 많은'when' setup을하는지 잘 모르겠습니다. 나는이 모든 일을 어떻게 할 것인지 이해하지 못합니다. – khelwood
테스트하려는 메소드를 조롱하면 실제로 테스트하지는 않습니다. – khelwood
귀하의 의견을 보내 주셔서 감사합니다. 이제 anyString()을 메서드 호출에서 when과 real string과 함께 사용합니다. 하지만 여전히 NullPointerException 내 문제가 – Slava