6

我正在努力在连续构建环境中设置 Robolectric,但我在设置它时遇到了一些问题。

我的 android Eclipse 项目结构由一个 android 项目和一个 JUnit4 测试项目组成,如 Robolectric “Eclipse 快速入门”快速指南中所述。我的示例测试在 Eclipse 中运行良好,但我还需要能够使用 ant 进行测试。我将如何构建我的 ANT build.xml 来支持这一点?以及我应该如何应用与 Eclipse 测试项目相同的更改?

我一直在研究 RobolectricSample 项目的 build.xml 文件,但它由一个项目组成,生产和测试代码都位于项目 src 文件夹下。我知道这就是 maven 假设事情的方式(???),但我只想选择 ANT。

4

1 回答 1

4

这是旧的,但希望这对其他人有帮助。我最近做过这个……robolectric、mockito、Jenkins 和 ant。这是我运行的 ant 构建脚本。基本上你只需要设置你的库的路径并设置一个目标来开始测试。我还将 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>

最后,我从 Jenkins 运行以下命令来启动它:

ant -f ./build-ant.xml test-report-junit
于 2013-08-13T00:29:56.530 回答