2012-03-21 51 views
0

我们必须为我们所有的测试时启动的Jetty服务器发布和测试Web服务的方法:编程方式启动码头在调试模式在Junit4方面

@Before 
public void startJettyAndloadWSDL() throws Exception { 
    String port = System.getProperty("jetty.port"); 
    server = new Server(Integer.valueOf(port)); 
    WebAppContext webapp = new WebAppContext(); 
    webapp.setSecurityHandler(getSecurityHandler()); // this is a local function in my test 
    webapp.setContextPath("/"); 
    webapp.setWar(System.getProperty("jetty.war")); 
    server.setHandler(webapp); 
    // Is there an option somewhere to say "start Jetty in Debug mode"? 
    server.start(); 
    service = new MyServiceToTest(new URL("http://127.0.0.1:" + port + "/WS/MyServiceToTest/1?WSDL"), 
     new QName("urn:myservicetotest.services.mycompany.com/1", "MyService")).getMyServicePort(); 
} 

有什么办法说码头到在调试模式下启动以在Eclipse中设置断点?

该测试是使用外部Eclipse的Maven运行的,那么在这种情况下最好做一个远程调试? 我们不想与Eclipse有大的联系,那就是为什么我们在所有JUnits测试中启动码头。

+4

如果整个测试运行在调试模式,你的服务器也应该(因为你在同一虚拟机启动它)。 – oers 2012-03-21 14:37:48

+0

感谢您的评论,它指向了正确的方式。 – 2012-03-27 08:10:35

回答

2

我们不能更改嵌入式Jetty,因为持续集成需要它,我们不会维护JUnit测试的两个版本(自动或手动)。

我找到的解决方案是:

1 - 从远程调试行家:

先从下面条命令测试(从Maven站点):

mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test 

,然后启动端口8000上的Eclipse远程调试。 但是这个解决方案不是很聪明:由于嵌入码头,我必须手动启动Eclipse的远程调试,它需要一些同步当我从命令行启动maven时(maven未集成到该项目中的eclipse中)。

我们终于可以用最好的办法是:

2 - 在Eclipse Junit的

我刚刚从Eclipse的执行JUnit测试在调试模式,这就是完美:码头启动方法不需要debug mode的任何选项,因为它是在运行时或调试模式下启动的JVM。

我并不需要使用在Eclipse WTP的码头,我只是在测试中这样定义的属性:

${jetty.port} 

和我想要的断点处停止。

唯一的配置是在Eclipse中,它不会改变我们的代码。

1

通常有两种上下文运行测试1)作为构建的一部分,以确保新构建不会失败任何测试; 2)在开发时确保一小部分功能在继续前进。

我认为这里的问题是,通过让你的测试开始Jetty,你的环境试图同时处理这两种情况,我不确定这是干净的方式。

我想你会想从你的测试代码中移除jetty start,并且为了处理上下文#1,让maven在预集成测试阶段启动Jetty,并运行需要在集成测试阶段使用jetty的测试,测试阶段。这是运行需要Web服务器的测试的一种非常常见的方式。

在上下文#2中操作时,在调试模式下在Eclipse中启动嵌入式Jetty,然后从Eclipse而不是从Maven运行测试。

+0

是的,在完美的世界中,我将使用带WTP的完全集成的应用程序服务器(tomcat,jetty),但是我们的项目不受限于任何IDE,无论如何,在Junit调试模式下开始测试对我来说已经足够了。 – 2012-03-27 08:12:11

相关问题