2012-03-21 49 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

相關問題