2012-05-16 4 views
1

ANT와 Eclipse를 사용하여 단위 테스트에 대한 jcoverage 보고서를 준비하고 싶습니다. 나는Eclipse에서 ANT를 사용하여 jcoverage Java 도구를 사용하는 방법

  • 아파치 개미 2 월 컴파일 (TM) 버전 1.8.3 (26) 2012
  • 셀레늄 - 서버 - 독립 - 2.20.0
  • 의 JUnit-4.8.1.jar
  • 이클립스를 사용하고 있습니다 SDK 3.6.1

나는이 link here에서 언급 한대로 시도했습니다.

하지만 문서를 사용할 수있는 경우 success.please를 제공하거나 보고서를 준비하는 방법을 명확히 할 수 없습니다.

내 개미 파일 :

<?xml version="1.0"?> 

<!DOCTYPE project [ 
    <!ENTITY start_stop_selenium SYSTEM "start_stop_selenium.xml"> 
    <!ENTITY properties_build_clean_compile_report SYSTEM "properties_build_clean_compile_report.xml"> 
]> 

<project name="Run Selenium Tests" default="all_selenium_tests" basedir="."> 

     <property name="libs" location="lib" /> 
     <property name="build.dir" value="${basedir}/build/"/> 
     <property name="build.classes.dir" value="${build.dir}/classes"/> 
     <property name="build.test-classes.dir" value="${build.dir}/test-classes"/> 
     <property name="build.instrumented-classes.dir" value="${build.dir}/instrumented-classes"/> 
     <property name="build.coverage.dir" value="${build.dir}/coverage"/> 
     <property name="build.reports.dir" value="${build.dir}/reports"/> 
     <property name="lib.dir" value="lib"/> 
     <property name="src" value="src"/> 
     <property name="src.dir" value="${basedir}/src/java"/> 
     <property name="test.dir" value="${basedir}/src/test"/> 


<!-- Corresponding Jar file for the Jcoverage.--> 
     <path id="jcoverage.path"> 
      <fileset dir="${lib.dir}"> 
       <include name="jcoverage-1.0.5.jar"/> 
       <include name="log4j-1.2.9.jar"/> 
       <include name="bcel-5.1.jar"/> 
       <include name="jakarta-oro-2.0.7.jar"/> 
       <include name="java-getopt-1.0.9.jar"/> 
      </fileset> 
     </path> 

    <path id="junit.class.path"> 
    <fileset dir="${lib.dir}"> 
     <include name="ant-junit.jar"/> 
     <include name="jcoverage-1.0.5.jar"/> 
     <include name="log4j-1.2.9.jar"/> 
     <include name="bcel-5.1.jar"/> 
     <include name="jakarta-oro-2.0.7.jar"/> 
     <include name="java-getopt-1.0.9.jar"/> 
     <include name="junit-4.8.1.jar"/> 
     <include name="selenium-server-standalone-2.20.0.jar"/> 
     <include name="jetty-repacked-7.6.1.jar"/> 
     <include name="org.mortbay.jetty-6.0.0alpha2.jar"/> 
     <include name="httpclient-4.1.2.jar"/> 
     <include name="httpcore-4.1.3.jar"/> 
     <include name="httpmime-4.1.2.jar"/> 
     <include name="selenium-java-2.20.0.jar"/> 
     <include name="selenium-java-2.20.0-srcs.jar"/> 
     <include name="logging-selenium-1.2.jar"/> 
     <include name="poi-3.7-20101029.jar"/> 
     <include name="robotframework-2.5.4.1.jar"/> 
     <include name="saxon-8.7.jar"/> 
     <include name="jxl.jar"/> 
    </fileset> 
    </path> 


     <target name="init"> 

      <!-- <delete dir="${build.dir}"/> 
      <delete dir="${build.classes.dir}"/> 
      <delete dir="{build.test-classes.dir}"/> 
      <delete dir="${build.coverage.dir}"/> 
      <delete dir="${build.instrumented-classes.dir}"/> 
      <delete dir="${build.reports.dir}"/> --> 

      <delete dir="${build.dir}"/> 
      <mkdir dir="${build.dir}"/> 
      <mkdir dir="${build.classes.dir}"/> 
      <mkdir dir="${build.test-classes.dir}"/> 
      <mkdir dir="${build.coverage.dir}"/> 
      <mkdir dir="${build.instrumented-classes.dir}"/> 
      <mkdir dir="${build.reports.dir}"/> 
     </target> 

     <target name="compile" description="compile all classes"> 
       <javac srcdir="${src.dir}" destdir="${build.classes.dir}" failonerror="yes" debug="yes"> 
       </javac> 
     </target> 

     <target name="instrument" description="Add jcoverage instrumentation"> 
      <instrument todir = "${build.instrumented-classes.dir}"> 
      <ignore regex="org.apache.log4j.*"/> 
      <fileset dir="${build.classes.dir}"> 
      <include name="**/*.class"/> 
      </fileset> 
      </instrument> 
     </target> 


      <target name="test" description="Unit test the application"> 
       <javac srcdir="${test.dir}" destdir="${build.test-classes.dir}" failonerror="yes" debug="yes"> 
       <classpath refid="junit.class.path"/> 

       <classpath location="${build.classes.dir}"/> 
       </javac> 
       <junit fork="yes" dir="${basedir}" errorProperty="test.failed" failureProperty="test.failed"> 

      <!-- note the classpath order, instrumented classes are before the original (uninstrumented) classes. --> 

       <classpath refid="junit.class.path"/> 
       <classpath location="${build.instrumented-classes.dir}"/> 
       <classpath location="${build.classes.dir}"/> 
       <classpath location="${build.test-classes.dir}"/> 

      <!-- the instrumented classes reference classes used by the jcoverage runtime. --> 

      <classpath refid="jcoverage.path"/> 
      <formatter type="xml"/> 

      <batchtest todir="${build.reports.dir}" > 
      <fileset dir="${build.test-classes.dir}"> 
      <include name="**/*Test.class"/> 
      </fileset> 
      </batchtest> 
      </junit> 
      </target> 


    <taskdef classpathref="jcoverage.path" resource="tasks.properties"/> 

      <target name="coverage" description="HTML and XML coverage reports can be found in build/coverage"> 
       <report srcdir="${src.dir}" destdir="${build.coverage.dir}"/> 
       <report srcdir="${src.dir}" destdir="${build.coverage.dir}" format="xml"/> 
       <echo> jcoverage reports have been generated. The HTML report is ${build.coverage.dir}/index.html The XML report is ${build.coverage.dir}/coverage.xml </echo> 
      </target> 


    <target name="all_selenium_tests" description="The Main Target for running all tests"> 
     <antcall target="init"/> 
     <antcall target="compile"/> 
     <antcall target="instrument"/> 
     <antcall target="test"/> 
     <antcall target="coverage"/> 
</target> 
</project> 

내 JUnit을 클래스 :

import org.junit.Before; 
import org.junit.Test; 
import org.openqa.selenium.server.SeleniumServer; 

import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.SeleneseTestCase; 
import com.thoughtworks.selenium.Selenium; 


public class sample extends SeleneseTestCase { 
static Selenium selenium; 
@Before 
public void setUp() throws Exception { 

     SeleniumServer seleniumserver=new SeleniumServer(); 
     seleniumserver.boot(); 
     seleniumserver.start(); 
     selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com"); 
     selenium.start();   

} 

@Test 
public void testjcoverage() throws Exception{ 

selenium.windowMaximize(); 
selenium.windowFocus(); 

selenium.setSpeed("1000"); 

selenium.open("/results-web/results/authentication/public/login?"); 


selenium.type("id=USER","labcorp"); 
selenium.type("id=PASSWORD","Labcorp"); 
selenium.click("css=input.loginButton"); 

selenium.stop(); 
} 
} 

콘솔 오류 :

Buildfile: E:\jcoverage\jcoverage\refactored-param-build.xml 
[taskdef] Could not load definitions from resource $(lib.dir). It could not be found. 
all_selenium_tests: 
[taskdef] Could not load definitions from resource $(lib.dir). It could not be found. 
init: 
[taskdef] Could not load definitions from resource $(lib.dir). It could not be found. 
compiling: 
[taskdef] Could not load definitions from resource $(lib.dir). It could not be found. 
instrument: 

BUILD FAILED 
E:\jcoverage\jcoverage\refactored-param-build.xml:25: The following error occurred while executing this line: 
E:\jcoverage\jcoverage\refactored-param-build.xml:96: Problem: failed to create task or type instrument 
Cause: The name is undefined. 
Action: Check the spelling. 
Action: Check that any custom tasks/types have been declared. 
Action: Check that any <presetdef>/<macrodef> declarations have taken place. 


Total time: 125 milliseconds 

솔루션을 제공하십시오.

+1

링크 된 페이지의 지침에 따라 어떤 문제가 발생 했습니까? – Attila

+0

안녕하세요 아틸라, 제 물건을 모두 여기에 넣었습니다. – Manigandan

+0

taskdef가 taskdef에 잘못된 paranthesis를 사용한 $ (lib.dir)을 찾을 수 없다고 말합니다. $ {lib.dir} – oers

답변

0

javac 컴파일러가 junit jar를 찾을 수 없다는 오류가 발생합니다. 당신이 compiling 개미 대상의 클래스 경로로 junit.class.path를 지정하지만, 그 클래스 경로는 전에 속성 정의를 (lib.dir을 같은) 이동해야

또한 build.xml 파일의 아무 곳이나 정의되지 않은 ${libs} 특성에 대한 참조를 포함 당신은

(${lib.dir}를 참조 jcoverage.path의 정의 전에 예를 들어)를 사용하면 -verbose 옵션 중 하나를 호출 개미가 사용하는 클래스 경로를 참조하거나 <javac> 작업하기 전에 <echo>${junit.class.path}</echo> 작업을 호출 할 수

+0

주셔서 감사합니다. 내 실수를 바로 잡았어. 이제는 jcoverage 보고서를 생성 할 수 있지만, 항상 0 % 적용 범위 만 표시합니다. 내 단위 테스트는 방금 컴파일되었지만 실행되지 않았습니다. – Manigandan

+0

문제는 junit 작업의''요소가 * .class 파일이없는'$ {src.dir}'디렉토리를 참조하고 있다고 생각합니다 (위에서 언급 한 링크는'$ {build.test-classes.dir }') – Attila

+0

나는 그 중 하나를 시도했지만 성공하지는 않는다. 0 %의 적용 범위만을 보여주는 보고서. – Manigandan

관련 문제