2012-03-14 31 views
6

Tôi đang làm việc để thiết lập Robolectric trong môi trường xây dựng liên tục và tôi gặp một số vấn đề khi thiết lập tất cả.Thử nghiệm với Robolectric và ANT

Cấu trúc dự án Eclipse android của tôi bao gồm dự án android và dự án thử nghiệm JUnit4 như được mô tả trong hướng dẫn nhanh "Bắt đầu nhanh cho Eclipse" Robolectric. Các thử nghiệm mẫu của tôi hoạt động tốt từ bên trong Eclipse, nhưng tôi cũng cần phải thử nghiệm với kiến. Làm thế nào tôi có thể xây dựng ANT build.xml để hỗ trợ điều này? và tôi nên áp dụng các thay đổi tương tự như thế nào với dự án thử nghiệm Eclipse?

Tôi đã xem xét tệp build.xml của dự án RobolectricSample, nhưng nó bao gồm một dự án duy nhất có cả mã sản xuất và mã thử nghiệm nằm trong thư mục src của dự án. Tôi hiểu đây là cách maven giả định mọi thứ là (???), nhưng tôi chỉ muốn dùng ANT.

+0

đã làm bạn con số này ra chưa? Tôi đang ở trong tình huống tương tự, nơi tôi muốn xây dựng bằng cách sử dụng ANT. – bianca

Trả lời

4

Điều này cũ nhưng hy vọng điều này sẽ giúp người khác. Tôi đã làm điều này gần đây ... robolectric, mockito, Jenkins, và kiến. Đây là kịch bản xây dựng kiến ​​mà tôi chạy. Về cơ bản bạn chỉ cần thiết lập đường dẫn đến thư viện của bạn và thiết lập một mục tiêu để bắt đầu thử nghiệm. Tôi cũng sao chép tệp android.jar và tệp maps.jar trong thư mục lib của dự án thử nghiệm, điều này dường như làm cho cuộc sống dễ dàng hơn nhưng có lẽ bạn có thể làm điều đó một cách tốt hơn.

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

Cuối cùng, tôi chạy lệnh sau từ Jenkins để làm cho nó tất cả bắt đầu:

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

Tại sao bạn cần cung cấp đối số 'test-report-junit'? –

Các vấn đề liên quan