2013-07-28 18 views
1

我有一個項目,部署在jboss 7.1.3上,並使用arquillian進行測試,並且我試圖向其添加代碼覆蓋率度量。arquillian jboss as7管理和jacoco - jacoco.exec文件爲空

即時通訊使用託管容器選項(jboss-as-arquillian-container-managed),現在我剛剛嘗試向jquery用於啓動jboss的jvm參數添加-javaagent參數,所以我的arquillian。 XML看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<arquillian xmlns="http://jboss.org/schema/arquillian" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 
    <defaultProtocol type="Servlet 3.0"/> 

    <engine> 
     <property name="deploymentExportPath">/tmp</property> 
    </engine> 

    <container qualifier="jboss" default="true"> 
     <configuration> 
      <property name="outputToConsole">true</property> 
      <property name="jbossHome">[jboss home]</property> 
      <property name="javaHome">[java home]</property> 
      <property name="javaVmArguments">-Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Djboss.server.log.dir=logs -javaagent:[profile]\.m2\repository\org\jacoco\org.jacoco.agent\0.6.2.201302030002\org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=C:\jacoco.exec,includes=*,excludes=,append=true,output=file,classdumpdir=classdumpdir,dumponexit=true</property> 
      <property name="startupTimeoutInSeconds">120</property> 
      <property name="allowConnectingToRunningServer">true</property> 
     </configuration> 
    </container> 
</arquillian> 

IM 100%肯定,這種說法是被拾起,因爲兩者的jacoco.exec文件和classdumpdir創建。

問題是jacoco.exec文件是空的。 jboss啓動,測試運行併成功完成,jboss關閉,classdumpdir被填充(所以根據jacoco規範,它意味着它正確地找到我的類),但jacoco.exec保持完全空。

如果我提供確切的保存javaagent參數到完全相同的jboss,我手動開始自己一切工作正常。

我在做什麼錯?

+0

你配置了jacoco擴展嗎?看到這裏:https://github.com/arquillian/arquillian-extension-jacoco/blob/master/src/test/resources/arquillian.xml我至少會列出擴展名,不包括排除。 –

+0

@JohnAment - 嘗試在我的arquillian xml中添加 - 沒有任何區別 – radai

回答

1

好的,問題是jacoco只在jvm關閉時才轉儲文件內容(它爲它註冊了一個鉤子),顯然arquillian(至少是我使用的版本)並沒有關閉jvm。

我結束了添加下面的方法來我的測試類:

@After 
public void writeOutJacocoData() { 
    try { 
     Class rtClass = Thread.currentThread().getContextClassLoader().getParent().loadClass("org.jacoco.agent.rt.RT"); 
     Object jacocoAgent = rtClass.getMethod("getAgent", null).invoke(null); 
     Method dumpMethod = jacocoAgent.getClass().getMethod("dump", boolean.class); 
     dumpMethod.invoke(jacocoAgent, false); 
    } catch(ClassNotFoundException e) { 
     logger.debug("no jacoco agent attached to this jvm"); 
    } catch (Exception e) { 
     logger.error("while trying to dump jacoco data",e); 
    } 
} 

其醜惡和野蠻(和使用他們不要在任何公開可用jacoco文物發佈jacoco類,因此反射),但作品。

+0

您使用的是什麼版本的arquillian? –

+0

即時通訊使用1.0.3.Final – radai

+0

似乎你的設置有其他問題。這不會發生在我身上。 –