3

モッキングフレームワークは初めてです。私が今取り組んでいるフレームワークは JMockit です。このトピックに関する私の理解が非常に乏しい場合は、ご容赦ください。

抽象クラスを拡張するクラス A があります。クラスは次のようになります。

class A extends AbstractClass{
      private B b = UtilClass.getBean("b");
      private C c = UtilClass.getBean("c");

  .........
  .........
  .........

}

UtilClass は次のようになります。

public final class UtilClass{
  private static UtilContext context = new UtilContext();
   //getBean method which returns a bean object
}

getBean メソッドをモックしたい。したがって、このメソッドをモックするには、UtilContext クラスをモックする必要があります。他のクラスをインスタンス化している場合は、それもモックする必要があります。このようにして、多くのクラスをモックする必要がありますが、これは良い考えではありません。私を助けてください。

4

1 に答える 1

6

UtilClass の getBean メソッドにのみアクセスする必要がある場合は、UtilClass 全体をモックし、$clinitメソッドでその静的初期化を無効にすることができます (コンパイル時に解決される静的初期化 (定数) は無効になりません)。

new MockUp<UtilClass>() {
    @Mock
    void $clinit() {
        //disable static initialization
    }

    @Mock
    public static SomeType getBean(String s) {
        if("b".equals(s)) return new B();
        if("c".equals(s)) return new C();
        ...
    }
};
于 2012-08-07T08:30:34.120 に答える