如何对dropwizard服务器资源进行集成测试?

时间:2014-02-08 16:57:30

标签: java maven integration-testing dropwizard

我正在编写dropwizard应用程序,我坚持使用集成测试。我试图在maven的pre-integration-test阶段启动服务器而不是在post-integration-test阶段停止它,但问题是我在使用maven-exec插件时丢失了java线程。 配置如下所示:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <id>create-and-run-dropwizard-test-server</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <executable>java</executable>
        <arguments>
           <argument>-jar</argument>
           <argument>target/my-server.jar</argument>
           <argument>server</argument>
           <argument>test-config.yml</argument>
        </arguments>
    </configuration>
</plugin>

使用它maven运行到pre-integration-test阶段,然后在同一个线程中启动服务器。无论如何,我可以将其作为bash脚本运行,而不是使用kill -9命令停止它,但此解决方案不依赖于平台。

还有其他方法可以进行集成测试吗? 附:我正在使用dropwizard v0.7.0-SNAPSHOT。

1 个答案:

答案 0 :(得分:4)

它已经过时了,但也许有人需要这些信息。对于集成测试,这里是this link

的示例代码
public class LoginAcceptanceTest {

    @ClassRule
    public static final DropwizardAppRule<TestConfiguration> RULE =
            new DropwizardAppRule<TestConfiguration>(MyApp.class, resourceFilePath("my-app-config.yaml"));

    @Test
    public void loginHandlerRedirectsAfterPost() {
        Client client = new Client();

        ClientResponse response = client.resource(
                String.format("http://localhost:%d/login", RULE.getLocalPort()))
                .post(ClientResponse.class, loginForm());

        assertThat(response.getStatus()).isEqualTo(302);
    }
}

用于资源测试follow this link