Articles of robolectric

如何使用Robolectric测试IntentService?

我正在尝试使用Robolectric测试onHandleIntent()方法。 我正在启动服务: Activity activity = new Activity(); Intent intent = new Intent(activity, MyService.class); activity.startService(intent); ShadowActivity shadowActivity = Robolectric.shadowOf(activity); Intent startedIntent = shadowActivity.getNextStartedService(); assertNotNull(startedIntent); 似乎startedIntent不为null,但似乎没有调用onHandleIntent() 。 我该怎么测试呢?

如何使用robolectric测试额外数据的启动意图

在一个活动中,我用一些随机的额外数据开始了一个新的Intent: Intent newIntent = new Intent(this, UserActivity.class); newIntent.putExtra(“key”, generateRandomKey()); startActivity(newIntent); 我测试了这样: Intent intent = new Intent(myactivity, UserActivity.class); Assert.assertThat(activity, new StartedMatcher(intent)); 它失败了,因为我的测试代码中的intent没有额外的数据key 。 由于key是随机的,因此很难提供相同的密钥。 所以我只想测试intent的目标类是否为UserActivity ,但是没有办法做到这一点。 有解决方案吗?

ClassCastException:NoClassDefFoundError无法强制转换为RuntimeException

我正在努力将我的代码库升级到Gradle 2.2和Android Studio 1.0。 我目前正试图让Robolectric 2.4工作,但是当我尝试运行unit testing时,我遇到了一个奇怪的问题。 只有在gradle clean后才会出现问题; 多次运行测试套件将产生通过测试(如预期的那样)。 当我在干净后运行测试时,我收到以下错误: java.lang.ClassCastException: java.lang.NoClassDefFoundError cannot be cast to java.lang.RuntimeException 我已经将错误追溯到此调用: Activity activity = Robolectric.setupActivity(MainActivity.class); 我是否使用Robolectric gradle插件( org.robolectric:robolectric-gradle-plugin:0.14.0 )或JC和K Androidunit testing插件( com.github.jcandksolutions.gradle:android-unit-test:2.1.1 )。 我在Robolectric Github上发现了这个问题,但它看起来还没有得到解决: https : //github.com/robolectric/robolectric/issues/1385 这个问题也在android studiounit testing插件中引用,在’Trouble Shooting’下: https : //github.com/evant/android-studio-unit-test-plugin 我目前的示例代码在这里: https : //github.com/KioKrofovitch/robolectric-upgrade-test 我已经能够在Robolectric样本上运行api-android-16项目而不会看到这个问题,尽管api-android-19和api-android-21项目由于其他原因而失败。 我看不出他们做了什么不同的事情,这样他们就不会失败。 https://github.com/robolectric/robolectric-samples 有人find了解决方法吗? 对Jenkins或Travis等CI工具进行两次运行测试并不是一个好的解决方法。 编辑:嵌入代码示例 我的顶级build.gradle,我添加了JC和K Unit测试库: […]

Android Robolectric点击RecyclerView项目

有没有办法模拟使用Robolectric点击RecyclerView项目? 到目前为止,我已尝试在RecyclerView的第一个可见位置获取View ,但这始终为null 。 它的getChildCount()保持返回0 ,并且findViewHolderForPosition始终为null 。 适配器从getItemCount()返回一个非0数字getItemCount()适配器中肯定有项目)。 我正在使用Robolectric 2.4 SNAPSHOT。

Robolectric和Gradle(Android工作室)的Android项目

我正在尝试使用Robolectric在一个项目构建中使用gradle在新的ide for android:Android studio中,但我面临一个奇怪的问题,我已经正确导入了所有库并在“src”中创建了“test”文件夹“,事实是每当我运行测试时,ide会继续说”Class not found:“com.example.myandroidproject.test”我做错了什么?我需要在gradle.build中更改一些内容吗?这是我的目录结构体:

在Android设备上运行Robolectric测试的最佳方式

我有一个Robolectric测试项目设置,但我也想在我的设备上运行这些测试来检查我是不是因为JVM与Dalvik的实现差异。 与robolectric测试不同,我不会经常运行这些测试。 我担心的是,维护测试套件并且他们validation实际设备function的努力很少。 最好的方法是什么? 我目前得到了什么: 我的robolectric测试项目作为测试用例TestPackage。 我用测试用例TestRoboOnAndroid创建了一个Android Test项目。 它创建一个TestPackage并对TestPackage中的每个测试进行测试。 现在,每次我向我的robolectric套件添加测试时,我都需要手动将其添加到我的设备套件中。 有没有办法用reflection自动完成? 此外,Robolectric使用JUnit 4(默认情况下),Android使用JUnit 3.所以我必须使用JUnit 3样式编写所有的Robolectric测试(从junit.framework而不是org.junit导入)。

Android:Robolectric不支持API级别1

这是我的基础测试类: @RunWith(RobolectricTestRunner.class) public class MainActivityTest { @Before public void setup() { //do whatever is necessary before every test } @Test public void testActivityFound() { Activity activity = Robolectric.buildActivity(MainActivity.class).create().get(); Assert.assertNotNull(activity); } } 当我在Android Studio下使用终端窗口执行我的测试时,出现此错误: java.lang.UnsupportedOperationException: Robolectric does not support API level 1, sorry! at org.robolectric.SdkConfig.(SdkConfig.java:24) at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.java:320) at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.java:296) at org.robolectric.RobolectricTestRunner.access$300(RobolectricTestRunner.java:61) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:202) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at […]

MultiDexApplication的使用导致Application类的Robolectric测试中断

使用gradle def( https://plus.google.com/+IanLake/posts/JW9x4pcB1rj )使用支持v4-r21添加Multi dex支持 apply plugin: ‘com.android.application’ android { compileSdkVersion 19 buildToolsVersion “20.0.0” defaultConfig { applicationId “info.osom.multidex” minSdkVersion 19 targetSdkVersion 19 versionCode 1 versionName “1.0” } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } dexOptions { preDexLibraries = false } afterEvaluate { tasks.matching { it.name.startsWith(‘dex’) }.each { dx -> if (dx.additionalParameters […]

使用robolectric测试异步任务

你知道如何使用Robolectric实现AsyncTasks的unit testing吗? 任何指针将不胜感激。

Gradle + Robolectric:我在哪里放置文件org.robolectric.Config.properties?

我正在尝试使用Robolectric设置测试,点击此存储库中的菜单按钮。 基本的Robolectric测试将运行,但我无法使用资源运行任何项目特定的测试,因为它说它无法find我的AndroidManifest.xml。 运行../gradlew clean check ,这是Robolectric html文件的标准输出: WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. To remove this warning, annotate your test class with @Config(manifest=Config.NONE). 我发现这些说明表明我应该创建一个org.robolectric.Config.properties文件,但我不知道该放在哪里。 我几乎到处都试过,尽管移动了文件,但错误信息中的路径始终与上面相同(./AndroidManifest.xml)。 这让我觉得构建过程从未在文件org.robolectric.Config.properties设置。 我也尝试了@Config(manifest =“”)指令,但这给了我一个cannot find symbol错误。 如果我将AndroidManifest.xml移动到我的项目目录中,那么我得到一个错误,它无法find路径./res/values ,我也无法解决。 有任何想法吗? 更新1 感谢Eugen,我现在使用@RunWith(RobolectricGradleTestRunner.class)而不是@RunWith(RobolectricTestRunner) 。 现在我得到了一个不同的错误,仍然发生在我的BasicTest.java的同一行 KeywordList keywordList = Robolectric.buildActivity(KeywordList.class).create().get(); 以下是Robolectric测试报告中标准错误,标准输出和“失败测试”选项卡的结果: 注意:我也尝试用最新的Robolectric更新,robolectric-2.2-SNAPSHOT.jar构建的jar替换,但仍然出错。 标准错误 WARNING: no system […]