1

例:「ログアウト」機能のケーステストをしたいのですが、「入力」には何を入れればよいでしょうか?メソッドがパラメーターを受信しないため、[ログアウト] ボタンをクリックしますか? 予想される出力は、[ログイン] ページに戻ることです。

public String logout() {
  FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
  return "/Login?faces-redirect=true";
}

これは非常にばかげた質問に違いありませんが、私はテスト ケースに慣れていないので、少し戸惑います。

4

2 に答える 2

0

FacesContext はグローバル変数です。つまり、それにモックを注入できます。私はMockitoを使用していると仮定します:

@Test
public testLogout()
{
   //setup
   FacesContext context = Mockito.mock(FacesContext.class);
   ExternalContext externalContext = Mockito.mock(ExternalContext.class);
   FacesContext.setCurrentInstance(context);
   when(context.getExternalContext()).thenReturn(externalContext);
   //act
   bean.logout();
   //verify
   verify(externalContext).invalidateSession();
}

これは最善の方法ではありませんが、JSF の設計が不適切なため、グローバル変数と暗黙的な依存関係を使用する必要があります。適切なソリューションには、IoC コンテナーと依存関係の挿入が含まれます。

于 2013-06-09T23:00:48.863 に答える