2012-03-14 20 views
6

Sto lavorando alla creazione di Robolectric in un ambiente di generazione continua e ho alcuni problemi nell'impostare tutto.Test con Robolectric e ANT

La mia struttura di progetto Android Eclipse è composta da un progetto Android e un progetto di test JUnit4, come descritto nella guida rapida di Robolectric "Quick Start for Eclipse". I miei test di esempio funzionano bene all'interno di Eclipse, ma ho bisogno di essere in grado di testare anche con formica. Come potrei costruire il mio ANT build.xml per supportare questo? e come dovrei applicare le stesse modifiche che sono state fatte con il progetto di test di Eclipse?

Ho esaminato il file build.xml del progetto RobolectricSample, ma quello è costituito da un singolo progetto con codice di produzione e test situato nella cartella src dei progetti. Capisco che questo è il modo in cui Maven assume che le cose siano (???), ma mi piacerebbe andare solo per ANT.

+0

Hai capire questo fuori ancora? Sono nella situazione simile, dove voglio costruire usando ANT. – bianca

risposta

4

Questo è vecchio ma si spera che questo aiuti qualcun altro. L'ho fatto recentemente ... robolectric, mockito, Jenkins e formica. Ecco lo script ant form che eseguo. Fondamentalmente hai solo bisogno di impostare il percorso delle tue librerie e impostare un target per avviare il test. Copio anche il file android.jar e il file maps.jar nella cartella lib del progetto di test, questo sembra semplificare la vita ma forse puoi farlo in un modo migliore.

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

Infine, ho eseguito il seguente comando da Jenkins per ottenere tutto è cominciato:

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

Perché è necessario fornire l'argomento 'test-report-junit'? –

Problemi correlati