2

私は現在、Glassfish3.1.2.2を使用して最初のEJBプロジェクトに取り組んでいます。私は2つの豆を持っています:

@Singleton
@Startup
public class ABean implements AInterface {
//implementation
}

@DependsOn("ABean")
@Startup
@Singleton
@EJB(name = "ABean", beaninterface = AInterface)
public class BBean implements BInterface {
//implementation
}

「BBean」を単体テストして「ABean」をモックしたい。現在、JUnitTestを起動すると「ABean」が起動しますが、「ABean」を「ABeanMock」と交換する方法はありますか?

これらのテストはjenkinsサーバーで実行されるため、実装をモックと交換するための自動メカニズムが必要です。したがって、コードを手動で採用することは、単一の手動テストでは問題ありませんが、自動テストでは実行できません。

単体テストにGlassfishEmbeddedAPIを使用しています。

手伝ってくれてありがとう。

4

1 に答える 1

0

これにはArquillianを使用できます。

Arquillianはコンテナー内でテストを実行し、必要に応じてアプリケーション サーバーにデプロイします。選択したクラスのみを使用することを選択できるため、これにより、ABeanを実装する置換を作成し、実際AInterfaceのものをデプロイしないことを選択できます。これにより、代わりに置換が使用されることになります。 ABean

テストは次のようになります。

@Singleton(name = "ABean")
class AMockBean implements AInterface {
  // Mocked bean implementation
}

@RunsWith(Arquillian.class)
public class MyTests {

  @Inject
  private BBean bbean;

  @Deployment
  public Archive<?> deployment() {
     return ShrinkWrap.create(JavaArchive.class)
            .addClass(BBean.class)
            .addClass(AMockBean.class)
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  }

  @Test
  public void testBBean() {
    bbean.whatever();
  }
}

これはすべてテストされていませんが、これに沿ったものである必要があります。環境と依存関係によっては、正しく構成することがより困難になる場合があります。

Arquillian は素晴らしいツールですが、最初から思い通りにセットアップするのは難しい場合があります。幸いなことに、このプロセスを支援するためのガイドがいくつかあります。

于 2012-10-16T11:08:54.720 に答える