- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正致力于在持续构建环境中设置 Robolectric,但我在设置时遇到了一些问题。
我的 android Eclipse 项目结构由一个 android 项目和一个 JUnit4 测试项目组成,如 Robolectric“Eclipse 快速入门”快速指南中所述。我的示例测试在 Eclipse 中运行良好,但我还需要能够使用 ant 进行测试。我将如何构建我的 ANT build.xml 来支持它?以及我应该如何应用对 Eclipse 测试项目所做的相同更改?
我一直在研究 RobolectricSample 项目的 build.xml 文件,但它由一个项目组成,生产代码和测试代码都位于项目 src 文件夹下。我知道这就是 maven 假设事情的方式(???),但我只想选择 ANT。
最佳答案
这是旧的,但希望这对其他人有帮助。我最近做了这个……robolectric、mockito、Jenkins 和 ant。这是我运行的 ant 构建脚本。基本上你只需要设置你的库的路径并设置一个目标来开始测试。我还在测试项目的 lib 文件夹中复制了 android.jar 文件和 maps.jar 文件,这似乎让生活更轻松,但也许你可以做一些更好的方法。
<?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
关于android - 使用 Robolectric 和 ANT 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9701286/
有没有办法在使用 Robolectric 运行测试时修复系统时钟?我有一些代码取决于星期几。在 rspec 中,有 TimeCop gem 允许您为系统修复时间。 Robolectric 有等效项吗?
实际上,我需要获取 API 调用的响应,为此我需要 Context。 最佳答案 更新。 仅用于版本 1.x 和 2.x: Robolectric.application; 对于 3.x 版本: Run
我在使用 roboelectric 2.2 时遇到以下错误 java.lang.IncompatibleClassChangeError: class org.objectweb.asm.tree.C
我正在使用 Robolectric用于我的单元测试并更新了我的Robolectric从 1.2 到 2.2 的 jar 并试图弄清楚如何在这个新版本中绑定(bind)影子类。这是我之前在做的: Rob
将 LeakCanary (1.3) 添加到我的应用程序中: @Override public void onCreate() { super.onCreate(); Fabric.w
我按照官方教程将 robolectric 添加到我现有的 Android 应用程序中。但是当我尝试运行一个简单的测试时,我收到了一个错误: java.lang.RuntimeException: No
我正在为一个使用多 dex 的项目配置 Robolectric。我正在使用 Robolectric 3.0 RC3,它应该支持 Multidex 而不会抛出“Multi dex 安装失败”异常。 te
我是 Robolectric 的新手,请帮助我理解它,这些有什么区别 loginActivity = new LoginActivity();loginActivity = Robolectric.s
在 Android Studio 中同步我的 Gradle 项目时,出现以下错误: Error:Could not find any version that matches org.robolect
我正在尝试使用 Robolectric 设置测试以单击 this repository 中的菜单按钮.基本的 Robolectric 测试将运行,但我无法使用资源运行任何特定于项目的测试,因为它说它找
我在网上搜索了如何使用 android studio 配置 robolectric。 网上有很多资料,但没有一个适合我。每个人都有自己的使用android studio配置Robolectric的步骤
我正在使用 robolectric 来测试一项使用 Google Analytics 的 Activity 。不幸的是,每当我尝试启动 Activity 时,我都会遇到以下异常 android.dat
我按照列出的方式运行迁移 here 运行测试后,我收到带有内部堆栈跟踪的错误 java.lang.RuntimeException: java.lang.ClassNotFoundException:
我在运行测试时出现间歇性故障。 java.lang.NullPointerException at org.robolectric.res.ResBundle$Value.compareTo(
我曾经使用 Android 单元测试运行我的单元测试,但后来切换到使用 Robolectric 的 Java 单元测试。我注意到使用 SaxParser DefaultHandler 的不同之处。基本
我在测试 getView 时遇到错误。测试代码在测试用例期间调用 View.setImageResource(0) 以在异常发生时设置空图像。 我用 Eclipse 运行了测试 robolectric
使用 Robolectric.buildActivity().setup() 的 JUnit 测试在 AndroidX 和 Robolectric 4.3 下不一致地失败。通常在测试套件中,像这样的前
使用.withIntent()创建事件在Robolectric 2中不起作用吗?我正在做以下 activity = Robolectric.buildActivity(MyActivity.c
我知道 Robolectric 官方网站上说这个框架用于单元测试,但在所有示例 robolectric 上都用于测试 View ...例如:Robolectric 可用于检查 textview X 的
是否可以在自己的模块中设置 robolectric 并将其作为依赖项添加到我的项目中?我可以将它添加到我的项目模块中,但如果它在它自己的模块中,我更喜欢它。我创建了一个 javaLibrary 模块并
我是一名优秀的程序员,十分优秀!