1

Java EE サーブレット仕様によると、そのメソッドServletContextListenerを介して展開/起動時にサーブレットコンテナーによって呼び出されるオブジェクトを実装しています。contextInitialized(ServletContext)

サーブレットコンテナの起動と展開をシミュレートする単体テストを作成しようとしていますServletContextListener(アプリが正しく初期化されているかどうかを判断できるようにするため)。

これは可能ですか?コンテナ固有ですか?もしそうなら、私はOGSを使用しています。次のようなコードを探しています。

@Test
public void shouldBootstrapAppAtDeployTime() {
    // Given
    GlassFishContainer container = new GlassFishContainer(); // ha!
    MyApp app = mock(MyApp.class); // MyApp implements ServletContextListener

    // When - deploy app to container
    // Causes app.contextInitialized(ServletContext) to be called
    container.deploy(app);

    // Then - verify the method was called with any ServletContext
    mock.verify(app.contextInitialized(Matchers.any());
}

これは、デモ目的で実装が不十分な Mockito が散りばめられたずさんな疑似コードです (私の意図を理解するためだけに)。前もって感謝します!

4

3 に答える 3

2

Arquillian でこれを解決できるかもしれません: http://arquillian.org/features/

Web ページから:

Arquillian はテストをランタイムにもたらし、コンテナ リソースへのアクセス、有意義なフィードバック、およびコードが実際にどのように機能するかについての洞察を提供します。

于 2012-05-31T16:53:45.990 に答える
2

あなたのアプローチは少し間違っていると思います。単体テストの疑似コードが行うことは、ServletContextListener を正しく呼び出すコンテナー ロジックをテストすることです。コンテナーがそれを適切に行っていることを信頼します。

私がすることは、リスナークラスを直接テストし、インスタンス化し、モック ServletContext を使用して contextInitialized() メソッドを呼び出すことです (仕事のための優れたツールである Mockito に精通していることがわかります!)。期待どおりの仕事をしました。

于 2012-05-31T17:49:07.383 に答える
0

そのようなテスト フレームワークがあるかどうかはわかりません。存在したとしても、実環境でのテストにはなりません(テスト環境とは異なる場合があります)。

この種のテストケースを作成する最良の方法は次のとおりです。

  1. ANTを使用して戦争を展開します。使用しているサーバーは、アプリケーションを展開するためにMBeanまたは何かを提供している可能性があります
  2. contextInitialized() メソッドが呼び出されたときに、リスナーが何らかの機能を実行している可能性があります。
  3. サーバーにリクエストを送信し、ステップ 2 が成功したかどうかを確認するクライアントを作成します。
于 2012-06-01T11:30:18.523 に答える