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'メソッドが' 'いつ' 'セットアップ' 'を一括して行うのかも分かりません。私はあなたがこのすべてを働かせる方法を理解していません。 – khelwood
テストしようとしているメソッドを疑似しても、実際にテストしているわけではありません。 – khelwood
ご意見ありがとうございます。今私はanyString()を使用して、メソッド呼び出しでwhenとreal文字列を使用します。しかし、私はまだNullPointerExceptionで私の問題がある – Slava