19

JSF アプリケーションにいくつかの単体テストを追加しようとしています。このアプリケーションはベスト プラクティスに大きく依存していないため、多くのサービス メソッドは を使用して、次のFacesContextようにマネージド セッション Bean からデータをプルします。

(これは util クラス内にあります)

  public static Object getPageBean(String beanReference) {
      FacesContext fc = FacesContext.getCurrentInstance();
      VariableResolver vr = fc.getApplication().getVariableResolver();
      return vr.resolveVariable(fc, beanReference);
  }

これを嘲笑する最良の方法は何でしょうか? 私は groovy を使用しているので、通常は作成できないクラスを作成するためのオプションがいくつかあります。

4

7 に答える 7

16

テストを実行する前にFacesContext.getCurrentInstance呼び出すことで、モック コンテキストを返すことができます。setCurrentInstance(FacesContext)メソッドは保護されていますが、リフレクションまたは拡張によってアクセスできますFacesContextここにMockito を使用したサンプル実装があります。

于 2012-01-26T17:11:49.813 に答える
2

私の場合、純粋なグルーヴィーでそれをモックすることができました。返すことができる MockBeans のマップを提供します。

private FacesContext getMockFacesContext(def map){
        def fc = [
          "getApplication": {
            return ["getVariableResolver": {
              return ["resolveVariable": { FacesContext fc, String name ->
                return map[name]
              }] as VariableResolver
            }] as Application
          },
          "addMessage": {String key, FacesMessage val ->
            println "added key: [${key}] value: [${val.getDetail()}] to JsfContext messages"
          },
          "getMessages": {return null}
        ] as FacesContext;
        return fc;
      }
于 2010-12-02T14:13:18.443 に答える