2012-03-14 13 views
6

Pracuję nad skonfigurowaniem Robolectric w środowisku ciągłej kompilacji i mam pewne problemy z ustawieniem tego wszystkiego.Testowanie za pomocą Robolectric i ANT

Moja androidowa struktura projektu Eclipse składa się z projektu androidowego i projektu testowego JUnit4, opisanego w podręczniku "Robolectric Quick Start for Eclipse". Moje przykładowe testy działają dobrze z poziomu Eclipse, ale muszę mieć możliwość przetestowania również za pomocą mrówek. W jaki sposób zbudowałbym mój build.xml ANT w celu obsługi tego? i jak zastosować te same zmiany, które są wykonywane w projekcie testowym Eclipse?

Zajrzałem do pliku build.xml projektu RobolectricSample, ale składa się z jednego projektu z kodem produkcyjnym i testowym zlokalizowanym w folderze src projects. Rozumiem, że w ten sposób maven zakłada, że ​​rzeczy są (???), ale chciałbym wybrać tylko ANT.

+0

skończyłeś rysunek to jeszcze? Znajduję się w podobnej sytuacji, w której chcę zbudować przy użyciu ANT. – bianca

Odpowiedz

4

To jest stare, ale mam nadzieję, że to pomoże komuś innemu. Robiłem to ostatnio ... robolectric, mockito, Jenkins i mrówka. Oto uruchamiany skrypt mrówki. Zasadniczo wystarczy ustawić ścieżkę do bibliotek i ustawić cel, aby rozpocząć test. Kopiuję również plik android.jar i plik maps.jar w folderze lib projektu testowego, co wydaje się ułatwiać życie, ale być może uda się to zrobić w lepszy sposób.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project name="unit_tests" default="test-report-junit" basedir="."> 
<description> 
    Sample Robolectric Ant Build 
</description> 

<!-- set global properties for this build, if you have libraries, include them here with a relative path...I have samples as library1, library2, library3, located on the same level as your project, but you may need to modified this to get it to work for your setup. --> 

<property name="libs.dir" value="./lib/"/> 
<property name="build.dir" value="./build/"/> 
<property name="android.library1.classpath" value="./../../library1/bin/classes/"/> 
<property name="android.library2.classpath" value="./../../library2/bin/classes/"/> 
<property name="android.library3.classpath" value="./../../library3/bin/classes/"/>  
<property name="test.report.dir" value="./test-reports/"/> 
<property name="test.html.dir" value="./test-report-html/"/> 
<property name="source.dir" value="./src/"/>  

<filelist id="android_jars" dir="${libs.dir}"> 
    <file name="android.jar"/> 
    <file name="maps.jar"/> 
</filelist> 

<filelist id="libs_jars" dir="${libs.dir}"> 
    <file name="junit.jar"/> 
    <file name="hamcrest.jar"/> 
    <file name="json.jar"/> 
    <file name="google-play-services.jar"/> 
    <file name="mockito-all-1.9.5.jar"/> 
    <file name="robolectric-1.1-jar-with-dependencies.jar"/> 
</filelist> 

<path id="compile_classpath"> 
    <filelist refid="libs_jars"/> 
    <filelist refid="android_jars"/> 
    <pathelement path="${android.project.classpath}"/> 
    <pathelement path="${android.library1.classpath}"/> 
    <pathelement path="${android.library2.classpath}"/> 
    <pathelement path="${android.library3.classpath}"/> 
    <pathelement path="${build.dir}"/> 
</path> 

<path id="junit_classpath"> 
    <pathelement path="${build.dir}"/> 
    <pathelement path="${android.library1.classpath}"/> 
    <pathelement path="${android.library2.classpath}"/> 
    <pathelement path="${android.library3.classpath}"/> 

    <!-- NOTE: junit.jar must come before android.jar! --> 
    <filelist refid="libs_jars"/> 
    <filelist refid="android_jars"/> 
</path> 

<!-- targets --> 

<target name="init"> 
    <!-- Create the time stamp --> 
    <tstamp/> 
    <mkdir dir="${build.dir}"/> 
</target> 

<target name="compile" depends="init" description="compile test source"> 
    <javac srcdir="${source.dir}" destdir="${build.dir}" debug="true" > 
     <classpath refid="compile_classpath" /> 
    </javac> 

    <copy todir="build"> 
     <fileset dir="src" includes="**/*.xml,**/*.properties,**/*.txt,**/*.ico" /> 
    </copy> 
</target> 

<target name="test-run" depends="compile" description="Run JUnit tests"> 
    <mkdir dir="${test.report.dir}"/> 
    <echo message="Running JUnit Tests in directory ${source.dir}..."/> 
    <junit showoutput="true" printsummary="yes" failureproperty="junit.failure" fork="yes" forkmode="once" maxmemory="512m"> 
     <formatter type="plain"/> 
     <formatter type="xml"/> 
     <batchtest todir="${test.report.dir}"> 
      <fileset dir="${source.dir}"> 
       <include name="**/*Test.java"/> 
      </fileset> 
     </batchtest> 
     <classpath refid="junit_classpath"/> 
    </junit> 
    <fail if="junit.failure" message="Unit test(s) failed. See reports!"/> 
</target> 

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

<target name="clean" description="Clean Up" > 
    <delete dir="${build.dir}"/> 
    <delete dir="${test.report.dir}"/> 
    <delete dir="${test.html.dir}"/> 
    <delete file="${basedir}/tmp/cached-robolectric-classes.jar"/> 
</target> 
</project> 

Wreszcie, należy uruchomić następujące polecenie z Jenkins, aby to wszystko się zaczęło:

ant -f ./build-ant.xml test-report-junit 
+0

Dlaczego musisz podać argument "test-report-junit"? –

Powiązane problemy