2013-07-28 4 views
1

jboss 7.1.3에 배포하고 테스트를 위해 arquillian을 사용하는 프로젝트가 있으며 코드 커버리지 메트릭을 추가하려고합니다.arquillian jboss as7 관리 및 jacoco - jacoco.exec 파일이 비어 있습니다.

메신저 관리 컨테이너 옵션 (jboss-as-arquillian-container-managed)을 사용하고 있습니다. 이제 arquillian이 jboss를 시작하는 데 사용하는 jvm 인수에 -javaagent 매개 변수를 추가하려고 시도했습니다. XML은 그렇게 보이는 다음 jacoco.exec 파일과 classdumpdir 모두가 생성되기 때문에이 인수가 포착되고있다

<?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> 

메신저 100 % 특정있다.

문제는 jacoco.exec 파일이 비어 있다는 것입니다. jboss가 시작되고, 테스트가 실행되고 성공적으로 완료됩니다. jboss가 종료되고 classdumpdir이 채워집니다 (jacoco 스펙에 따라 클래스가 올바르게 검색됨을 의미 함)하지만 jacoco.exec은 완전히 비어 있습니다.

정확하게 수동으로 시작하는 동일한 jboss에 정확히 javaagent 인수를 제공하면 모든 것이 잘 작동합니다.

무엇이 잘못 되었나요?

+0

jacoco 확장을 구성 했습니까? https://github.com/arquillian/arquillian-extension-jacoco/blob/master/src/test/resources/arquillian.xml 최소한 include 제외하지 않고 확장 프로그램을 나열합니다. –

+0

@JohnAment - 내 arquillian XML에을 추가하려고 시도했습니다. 아무런 차이가 없습니다. – radai

답변

1

ok, jvm이 종료 될 때 jacoco가 파일 내용을 덤프 (해당 파일에 대한 후크 등록)하고 분명히 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. 최종 사용 – radai

+0

설정과 다른 것으로 보입니다. 이것은 나를 위해 발생하지 않습니다. –