2

Embedded Glassfishについて誰か知っていますか? EJB テストのいくつかを実行したいのですが、テストを実行するたびに Glassfish-embedded を開始および停止したくありません。

プラグインのドキュメントによると、これを POM に入れる必要があります。

            <plugin>
            <groupId>org.glassfish</groupId>
            <artifactId>maven-embedded-glassfish-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <app>target/ejbcontainer-1.0-SNAPSHOT.jar</app>
                <name>test</name>
                <ports>
                    <http-listener>8080</http-listener>
                    <https-listener>8181</https-listener>
                </ports>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>start</goal>  
                        <goal>deploy</goal>
                        <goal>undeploy</goal>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin> 
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <configuration>
                <skip>true</skip>
            </configuration>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>false</skip>
                    </configuration>
                </execution>
            </executions>
        </plugin>

これはすべて良いです。この埋め込まれたグラスフィッシュを「実行」できます。コンソールにこれが表示され、稼働中であることが証明されます。

情報: テストは 1,124 ミリ秒で正常にデプロイされました。PlainTextActionReporterSUCCESSDescription: deploy AdminCommandApplication は test という名前でデプロイされました。[name=test Dec 16, 2013 6:03:29 PM PluginUtil doDeploy 情報: デプロイされたテスト ENTER を押して再デプロイし、X を押して終了します

ただし、テスト ファイルを「実行」すると、埋め込まれたグラスフィッシュの新しいインスタンスが作成されます。

テスト ファイルが、現在実行中のコンテナーを取得していません。

これが役立つ場合のテストファイルは次のとおりです。

public class Test extends TestCase {

    private Context ctx;
    private EJBContainer ejbContainer;

    public Test(String testName) {
        super(testName);
    }

    @BeforeClass
    public void setUp() {
        ejbContainer = EJBContainer.createEJBContainer();

        System.out.println("Opening the container");

        ctx = ejbContainer.getContext();
    }

    @AfterClass
    @Override
    public void tearDown() {
        ejbContainer.close();
        System.out.println("Closing the container");
    }

    @org.junit.Test
    public void testApp() throws Exception {
        TemperatureConverter converter = (TemperatureConverter) ctx.lookup("java:global/classes/TemperatureConverter");
        assertNotNull(converter);
    }
}
4

1 に答える 1

2

組み込みのグラスフィッシュを自分でいじっており、主にログ出力に関連するいくつかの構成の問題があるため、この質問を見つけました。

埋め込まれたグラスフィッシュをテストに使用する方法は、Maven 統合テスト フェーズにバインドすることです。

          <executions>
            <!-- Start embedded GlassFish -->
            <execution>
                <id>start</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>start</goal>
                </goals>
            </execution>
            <execution>
                <id>deploy</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>deploy</goal>
                </goals>
            </execution>
            <execution>
                <id>stop</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>undeploy</goal>
                    <goal>stop</goal>
                </goals>
            </execution>
          </executions>

そして、Maven Failsafe Pluginを使用して、verify ゴールの一部としてテストを実行します。ただし、これらは統合テストのようになります。myTestFileIT.java のように IT の接尾辞を付けてテスト ファイルに名前を付けると、それらは自動的に取得されます。

その後、次の Maven コマンドを実行してテストを実行できます。

 mvn verify

私は元々、このセットアップが非常にうまく機能している組み込みの Jetty を使用していましたが、glassfish を必要に応じて正確に構成するには、もう少し手間がかかり、かなり時間がかかることがわかりました。

これがあなたの問題に何らかの形で役立つことを願っています.

于 2014-01-03T10:59:20.857 に答える