2012-03-14 9 views
6

私はRobolectricを継続的なビルド環境でセットアップしようとしています。すべての設定に問題があります。RobolectricとANTでのテスト

私のアンドロイドEclipseプロジェクト構造は、Robolectricの「Quick Start for Eclipse」クイックガイドに記載されているように、アンドロイドプロジェクトとJUnit4テストプロジェクトで構成されています。私のサンプル・テストはEclipse内からうまく動作しますが、私もantでテストできる必要があります。これをサポートするためにANT build.xmlをどのように構築すればよいですか? Eclipseテストプロジェクトで行ったのと同じ変更をどのように適用すればよいですか?

私はRobolectricSampleプロジェクトのbuild.xmlファイルを調べていますが、プロダクションとテストコードの両方がプロジェクトsrcフォルダの下にある単一のプロジェクトで構成されています。私はこれが物事が(???)であると仮定していることを理解していますが、私はANTのためだけに行きたいと思います。

+0

あなたはまだこれを理解しましたか?私はANTを使ってビルドしたいという同様の状況にあります。 – bianca

答えて

4

これは古いものですが、これが他の人に役立つことを願っています。私は最近これをやったことがあります... robolectric、mockito、Jenkins、ant。ここに私が動かすant buildスクリプトがあります。基本的には、ライブラリへのパスをセットアップし、テストを開始するターゲットを設定するだけです。また、android.jarファイルとmaps.jarファイルをテストプロジェクトのlibフォルダにコピーしていますが、これは人生を楽にするようですが、おそらくもっと良いやり方をすることができます。

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

最後に、私はそれをすべてを始めるためにジェンキンスさんから次のコマンドを実行します。

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

なぜ 'test-report-junit'引数を指定する必要がありますか? –

関連する問題