自动化JUnit测试Eclipse中服务器上的功能?

时间:2014-11-21 09:09:01

标签: eclipse unit-testing web-applications jetty junit4

我会在Eclipse项目中添加一些JUnit测试,该项目将服务器上的功能测试到Eclipse Web项目。

我可以在外部Tomcat服务器(Run As | Run on Server)上从Eclipse内部运行Web应用程序,然后在Eclipse内部运行JUnit测试,而第一个仍在运行。

我理解应该可以通过使用在Eclipse内部运行并且可以启动的Jetty(而不是Tomcat)服务器来完全自动化两个步骤。在@BeforeClass(或更早)。

Eclipse是否支持这种开箱即用的单元测试。我目前正在为Web开发人员使用Eclipse Java EE IDE(版本:Kepler Service Release 2)。

1 个答案:

答案 0 :(得分:1)

Eclipse(以及任何其他IDE)不会阻止您在单元测试中做任何事情。它也不太支持,这是你的问题的核心:Eclipse不会为你的单元测试启动服务器。对于我所知道的所有其他IDE也是如此。

相反,您需要阅读如何embed Jetty in a Java application(=您的单元测试),以便第一个测试可以启动服务器。为此使用延迟初始化模式:

private static JettyManager jetty;

@Before public void startServer() {
    if( null == jetty ) {
        jetty = new JettyManager();
        jetty.start();
    }
}

您可以使用JVM关闭挂钩来彻底停止服务器。

我使用相同的模式来创建应该在测试期间使用的数据库,以确保它是干净的。为此,我embed an H2 database

如果您想要更多自动化,请查看Maven。它可以运行集成测试(包括在开始测试之前部署WAR)。见http://www.benoitschweblin.com/2013/03/run-jetty-in-maven-life-cycle.html

使用Maven Cargo plugin,您可以部署到几乎每个J2EE容器。

或者使用Jenkins:http://programmaticponderings.wordpress.com/2013/11/13/building-a-deployment-pipeline-using-git-maven-jenkins-and-glassfish-part-2-of-2/