2

私は自分のテストでjmockitを使用しており、テストしたい1つのクラスでInitialContext直接使用しています。だから私は次のものを持っています:

public class MyClass {
  public void myMethod() {
    InitialContext ic = new InitialContext();
    javax.mail.Session mailSession = ic.lookup("my.mail.session");

    // rest of method follows.....
  }

私のテストケースでは、これを呼び出して「モック」InitialContextクラスを使用します。

Mockit.redefineMethods(InitialContext.class, MockInitialContext.class);

InitialContextjmockit でクラスをモックする最良の方法は何ですか。

私はすでにいくつかの方法を試しました(自分のを使用するなどMockInitialContextFactory)が、同じエラーに遭遇し続けています:

NoClassDefFoundError: my.class.MockInitialContext

私が Google で見る限り、JNDI を使ったモックは非常に厄介です。誰かが私にガイダンスを提供したり、解決策を教えてくれませんか? それは大歓迎です。ありがとうございました。

4

3 に答える 3

4

誰かがここに投稿してから 1 年が経ちましたが、最近、JMockit を使用して EJB 呼び出しをモックしていたので、共有するのが正しいと感じました。(私はそれをテストしていませんが、コードは非常に似ているはずです)

次のように、いくつかのモック オブジェクトを TestCase のフィールドとして定義できます。

@Mocked InitialContext mockedInitialContext;
@Mocked javax.mail.Session mockedSession;

次に、testXXX メソッドで Expectations() を定義できます。その後は、テストしたいメソッドを呼び出すだけです。

public void testSendindMail(){
     new Expectations(){
        {
    mockedInitialContext.lookup("my.mail.session");returns(mockedSession);    
     }
      };
    MyClass cl = new MyClass ();
    cl.MyMethod();//This need JNDI Lookup
}
于 2009-10-27T22:47:06.810 に答える
3

一般に、JNDI をモックするには、Bean をデプロイするためのモック コンテナーを提供できる EJBMock などのフレームワークを使用する必要があります。

もう 1 つの方法は、コードからコンテキストを作成して渡されるようにリファクタリングすることです (これは依存性注入リファクタリングです)。そうすれば、モックを自由に置き換えることができるはずです。

于 2008-10-06T17:02:51.710 に答える
1

my.class.MockInitialContext が存在しないため、 NoClassDefFoundError が発生しています。Mockit.redefineMethods() に引数として渡す場合は、そのクラスを作成する必要があります。MockInitialContext クラスには、String パラメータを受け取り、javax.mail.Session を返す lookup() という名前のメソッドだけが必要です。

私はJMockit アノテーションが好きですが、JMockit の使用方法の他の例については、そのページの残りの部分を参照してください。

于 2008-10-17T20:04:47.377 に答える