2

WebSphere 7 で Java EE アプリケーションを実行しています (IBM RAD 7.5 / Eclipse を使用)。

基本的には user.JSP -> UserServlet -> @Stateless UserService -> UserDAO -> Oracle

UserService の JUnit テストをいくつか書きたいと思います。

Eclipse 内からアプリケーションを起動すると、WebSphere 上で実行されます。Eclipse の新しい Java プロジェクトで JUnit テストを行っています。私の質問は、私の JUnit テストが UserService への参照にどのようにアクセスできるかということです。

@EJB アノテーションのようなことをする方法はありますか:

public class UserTests extends TestCase {

  @EJB  
  private UserServiceLocal userService;

  public void test1() throws Exception {
    Assert.assertTrue("userService is not null", (userService != null));
  }

}

これが私の UserService の基本的なバージョンです。

@Stateless
public class UserService implements UserServiceLocal {

  @EJB
  private UserDAOLocal userDAO;

  /* ... */
}

注: @EJB は何も注入しません。

注:userService = (UserServiceLocal)new InitiatContext().lookup(UserServiceLocal.JNDI);どちらも機能しません。「NamingManager.getURLContext は、このスキームのファクトリを見つけることができません: ejblocal」

@Local
public class interface UserServiceLocal {

  public static final String JNDI = "ejblocal:com.myapp.service.UserServiceLocal";

  /* ... */
}

どんな提案でも大歓迎です!

ロブ

4

3 に答える 3

2

埋め込みコンテナーを使用して問題を解決するか、このタスクに Arquilian を使用することを検討してください。Arquillian では、「Java EE デプロイメント」をオンザフライで (つまり、コードを介して)ビルドし、 Arquilian を使用してアプリケーション サーバーにデプロイできるため、JUnit を実行し、JUnit テストを介して実際にサーバー上でコードを実行できます。 .

于 2012-06-21T19:06:10.743 に答える
1

結局のところ、私の解決策は、JUnit からテストしたい EJB にリモート EJB インターフェースを追加することでした。

新しい「アプリケーション クライアント プロジェクト」を作成し、そこに JUnit テストを配置しました。私の JUnit テストは、EJB のリモート ルックアップを行います。問題なく動作するようです。

ただし、WebSphere 7 を使用する場合、createEJBStubs コマンドを使用して必要なスタブを生成する必要がありました。詳細はこちらとこちら:

http://www-01.ibm.com/support/docview.wss?uid=swg21393419

http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frejb_3stubscmd.html

于 2012-06-22T17:25:37.143 に答える
0

createEJBStub スクリプト用のmaven-plugin ラッパーを作成しました。

なんで?

これにより、展開後にアプリケーションに対して CI セットアップの一部として実行されるテスト Maven プロジェクトを構築できます。

より具体的には、maven と一緒に使用すると、テスト プロジェクトで次のことが可能になります。

  1. Maven 依存関係管理を利用して、内部の nexus リポジトリに公開する API jar をプルします
  2. 「ソースの生成」Maven ライフサイクルの一部としてスタブ クラスを作成する
  3. EJB を使用してアプリケーション サーバーに対して junit テスト ケースを実行し、統合テストを行います。
于 2013-05-08T17:07:56.937 に答える