문제

편집하다:이 문제는 GTEST 1.4.0에서 Google에 의해 수정되었습니다. 원래 버그 보고서를 참조하십시오 자세한 내용은.

최근 C ++ 테스트 프레임 워크를 위해 GTEST로 전환했으며 현재 사용할 수없는 훌륭한 기능 중 하나는 Junit 스타일 XML 테스트 보고서를 생성 할 수있는 기능입니다. 그런 다음 Hudson 빌드 서버에서 읽을 수 있습니다.

GTEST 테스트 스위트가 생성 한 XML 출력은 모두 합법적입니다.

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
...etc.
    </testsuite>
</testsuite>

또한 ANT 빌드 스크립트에 Junitreport 작업을 추가하려고 시도했습니다.이 스크립트는 잘 작동하며 XML을 생성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
    ...etc.
    </testsuite>
 </testsuite>

문제는 ANT에 Junit 테스트 결과를 게시 한 다음 원시 테스트 결과 XML 또는 Ant Junitreport 작업에서 생성 된 편집 된 결과를 지적 할 때마다 Hudson은 항상 테스트 결과를 찾는 것에 대해 불평합니다.

나는 Java 남자가 아니기 때문에 여기서 무슨 일이 일어나고 있는지 알 수 없으며 Junit XML이 어떻게 보일지에 대한 예를 찾을 수 없습니다. 누군가 나를 올바른 방향으로 가리키는 것을 도울 수 있습니까?

도움이 되었습니까?

해결책 2

편집하다: Google Test는이 문제를 해결했으며 GTEST 1.4.0 릴리스에 포함되어 있습니다. 원래 버그 보고서를 참조하십시오 더 많은 정보를 위해서.

바! 마침내이 문제의 원인을 발견했습니다. GTEST는 모든 테스트 결과에 대해 하나의 거대한 XML 파일을 생성하고 Hudson은 클래스 당 하나의 XML 테스트 보고서를 기대하기 때문입니다. 나는 썼다 이 문제에 대한 해결 방법으로 Perl 스크립트. 사용하려면 Ant XML 스크립트에서 다음과 같은 모습을 목표로합니다.

<target name="runtests">
  <exec executable="wherever/${ant.project.name}Test" failonerror="false" dir="tests">
    <arg value="--gtest_output=xml:${build.dir}\reports\${ant.project.name}.xml"/>
  </exec>
  <!-- Workaround for broken gtest output -->
  <mkdir dir="${build.dir}/reports/output"/>
  <exec executable="perl" failonerror="false" dir="tests">
  <arg value="gtest-hudson.pl"/>
    <arg value="${build.dir}/reports/${ant.project.name}.xml"/>
    <arg value="${build.dir}/reports/output"/>
  </exec>
</target>

어떤 이유로, GTEST는 ANT에서 잘못된 슬래시 스타일을 좋아하지 않으므로 Hudson이 Windows 서버에서 실행되면서 Windows 용 Exec를 만들었습니다. 유닉스의 경우 '/'로 변경하십시오.

나도 GTEST 페이지에 문제를 제기했습니다, 또한 하나 허드슨의 문제 추적기, 그래서, 두 팀 중 하나가 문제를 해결하기를 희망합니다. 나는 뛰어 들어 스스로 패치를 만들 시간이 충분하지 않기 때문에 .... 이것이 가까운 시일 내에 고정되지 않으면 나는 아마도 나는 그냥해야합니다. ;)

다른 팁

내가하는 방법은 다음과 같습니다.

    <target name="junit" depends="compile-tests" description="run all unit tests">
      <mkdir dir="${reports}"/>
      <junit haltonfailure="false">
         <jvmarg value="-Xms128m"/>
         <jvmarg value="-Xmx128m"/>
         <classpath>
            <path refid="project.classpath"/>
         </classpath>
         <formatter type="xml"/>
         <batchtest fork="yes" todir="${reports}">
            <fileset dir="${test}/classes">
                <include name="**/*Test*.class"/>
            </fileset>
         </batchtest>
      </junit>
  </target>

  <target name="generate-reports" depends="junit" description="create JUnit test HTML reports">
      <mkdir dir="${reports}"/>
      <junitreport todir="${reports}">
          <fileset dir="${reports}">
              <include name="TEST-*.xml"/>
          </fileset>
          <report format="frames" todir="${reports}"/>
      </junitreport>
  </target>

나는 이것이 XML을 구문 분석하는 데 문제가 아니라 XML 파일을 찾는 데 문제가 있다고 확신합니다. Hudson Config에서 상대 경로를 사용하는 경우 어떤 디렉토리가 어떤 디렉토리와 관련이 있는지 확인하십시오 (특정 상황에서는 불쾌하지 않은 것을 기억하는 것 같습니다).

Junit XML 파일의 모습에 대한 예에 대해서는 행운을 빕니다. 어디에서나 정확하게 지정되지 않았습니다. 도구마다 방언이 다릅니다. 즉, 허드슨은 그들 모두를 인식하는 데 좋은 일을합니다. XML 형식을 처음 소개 한 것은 Junitreport의 개발자라고 생각합니다. 따라서 사용하는 경우, 그것은 당신이 얻을 수있는 것만 큼 표준입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top