Articles of robolectric

错误:带有roboelectric和realm的java.lang.UnsatisfiedLinkError

嗨,我正在使用realm数据库为我的应用程序和使用roboelectricunit testing框架进行unit testing。 我看到realm是用本机c代码编写的,它有librealm-jni.so文件用于它们的function。 我收到UnsatisfiedLinkError错误,读取robolectric不支持本机库的地方。 我认为必须有某种方法来解决它。 我尝试了使用Robolectric时如何加载.so的接受答案? 但没有运气。 java.lang.UnsatisfiedLinkError: Can’t load library: C:\Users\XS~1\AppData\Local\Temp\android-tmp-robolectric7796034244909642596\app_lib\realm-jni.dll.2.3.1 at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at com.getkeepsafe.relinker.SystemLibraryLoader.loadPath(SystemLibraryLoader.java:29) at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:198) at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:136) at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70) at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:57) at io.realm.internal.RealmCore.loadLibrary(RealmCore.java:59) at io.realm.Realm.init(Realm.java:187) at com.xyz.helloworld.HelloWorldApplication.onCreate(HelloWorldApplication.java:17) at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:147) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:329) at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:259) at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:41) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:199) […]

应用的AndroidManifest.xml中的元数据标记没有正确的值

我遇到了Robolectric我的AndroidManifest.xml出现问题的问题。 我的应用程序运行正常,但Robolectric失败了我的所有测试,甚至assertTrue(true) 。 错误是: android.view.InflateException: XML file /[blah]/build/res/all/debug/layout/activity_main.xml line #-1 (sorry, not yet implemented): Error inflating class fragment 引起的: java.lang.IllegalStateException: The meta-data tag in your app’s AndroidManifest.xml does not have the right value. Expected 4030500 but found 0. You must have the following declaration within the element: 问题是我的清单中已经有了这一行。 以下是一些相关文件: AndroidManifest.xml中: 的build.gradle: buildscript { repositories { […]

用Robolectric模拟HttpResponse

使用Robolectric 2.3-SNAPSHOT,我想测试一个在后台执行请求的对象。 为了隔离它,我试图模仿返回的HttpResponse,在投入几个小时后没有成功。 我创建了一个任何人都可以克隆的项目。 模拟运行./gradlew检查 https://github.com/Maragues/RobolectricDummyProject(git clone https://github.com/Maragues/RobolectricDummyProject.git ) 我试过了 Robolectric.setDefaultHttpResponse(200,“my_mocked_word”); MockWebServer( https://code.google.com/p/mockwebserver/ ) 但测试失败是因为他们查询真实的URL private static final String MOCKED_WORD = “MOCKED”; @Test public void mockedRequestUsingMockServer() throws Exception { mMockWebServer.enqueue(new MockResponse().setBody(MOCKED_WORD)); mMockWebServer.play(); Robolectric.getFakeHttpLayer().interceptHttpRequests(false); Robolectric.getFakeHttpLayer().interceptResponseContent(false); String result = request.loadDataFromNetwork(); assertEquals(MOCKED_WORD, result); } @Test public void mockedRequestUsingRobolectric() throws Exception { Robolectric.setDefaultHttpResponse(200, MOCKED_WORD); String result = request.loadDataFromNetwork(); assertEquals(MOCKED_WORD, […]

Android Studio – Robolectric:android.content.res.Resources $ NotFoundException:没有这样的标签com.my.app:string/app_name

这个问题我似乎无法摆脱,我已经经历了大概3或4打的文章和线程试图解决它。 我已经概述了以下所有内容。 基本上问题是,问题是我的Robolectric存在缺陷吗? 或者是我缺少一些小步骤,或者我有一个奇怪的插件组合。 任何有关这方面的指导将不胜感激。 Windows 7版本: Gradle 2.7 Android Studio 1.3.2 Robolectric 3.0 Roboguice 3. + 项目依赖性: dependencies { classpath ‘com.android.tools.build:gradle:1.3.0’ classpath “com.newrelic.agent.android:agent-gradle-plugin:4.244.0” classpath ‘com.github.triplet.gradle:play-publisher:1.1.2’ classpath ‘org.moallemi.gradle.advanced-build-version:gradle-plugin:1.5.0’ } 应用程序依赖项 import org.moallemi.gradle.internal.VersionCodeType apply plugin: ‘com.android.application’ apply plugin: ‘newrelic’ apply plugin: ‘com.github.triplet.play’ apply plugin: ‘org.moallemi.advanced-build-version’ android { def SERVICE_ACCOUNT = “account”; def P12_KEY = file(‘mykey.p12’) signingConfigs […]

PowerMockito:模拟上的NotAMockException

有点复杂的设置。 Robolectric,PowerMockito基于规则的配置。 @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) @PowerMockIgnore({“org.mockito.*”, “org.robolectric.*”, “android.*”}) // Using “PrepareOnlyThis” prevents powermock from trying to instrument the whole hierarchy, // part of which we’ve ignored (android.os.* in this case) @PrepareOnlyThisForTest({ServiceCallbackBase.class}) // this class extends Handler, // so we need PrepareOnlyThis. It also has some final methods we need to verify() […]

用于Marshmallow PermissionHelper的Android Robolectricunit testing

我想学习Robolectric用于Android Marshmallow应用程序的unit testing。 我用一些方法编写了一个PermissionHelper ,使权限处理更容易一些。 为了开始这个类的unit testing,我试图测试最简单的方法: public static boolean hasPermissions(Activity activity, String[] permissions) { for (String permission : permissions) { int status = ActivityCompat.checkSelfPermission(activity, permission); if (status == PackageManager.PERMISSION_DENIED) { return false; } } return true; } 这是我到目前为止写的Robolectric测试: @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class) public class PermissionHelperTest { private PermissionHelper permissionHelper; private ShadowApplication application; @Before public […]

使用Volley和Dagger获得Robolectric ShadowApplication时的NPE

在我的Android应用程序中,我设置了Volley。 Robolectric.application已初始化,所有其他测试均可顺利运行。 尝试获取模拟HTTP响应时出现此错误。 这是我的测试: @RunWith(MyRobolectricTestRunner.class) public class ApiTests { @Inject protected Api api; @Before public void setUp() { ObjectGraph.create(new AndroidModule(Robolectric.application), new TestApplicationModule()).inject(this); } @Test public void shouldGetErrorList() throws Exception { Project project = new Project(“test”, “test”, “test”, DateTime.now()); addPendingProjectsErrorsResponse(“response.json”); //adding response to FakeHttpLayer api.getProjectErrors(project, new Listener() { @Override public void onResponse(ProjectErrors response) { assertNotNull(response); } […]

Android:使用Robolectric和Mockito对Android应用程序进行unit testing

我有一个Java库,它使用Android API中的一些东西。 我想用Mockito为这个库编写unit testing。 我有办法解决这个问题吗? Mockito在Dalvik VM上表现不佳,请看这篇文章: 将Mockito与Android虚拟机配合使用 更新: 自从这篇文章发表Robolectric以来,我就有机会在Pivotal Labs工作,并为这个库做出了一些贡献。 我建议在Android测试框架/ mockito上使用它。 此外,您可以自由使用Robolectric和Mockito,但Robolectric中的阴影对象使得大多数用例都不需要Mockito。 尝试对Android进行unit testing的问题在于,您构建的Android库会将所有方法都存根,以便抛出存根exception,或者返回null。 如果你想测试你的应用程序并想要任何Android行为你运气不好,除非你使用Robolectric在类加载时动态重写字节码,并注入一个模拟行为的阴影对象。 更新2: 已经有一段时间了,情况发生了变化。 Robolectric中的许多Shadow类已经被真正的Android类所取代。 现在使用真正的Android jar并且Robolectric仅为更小的一组东西加载Shadow类。 这是使用Robolectric进行Android测试的更多原因。

在robolectric测试中使用资产

在我的robolectric测试中,我正在尝试读取文件。 由于此文件仅包含测试数据,因此我将其放在测试的资产中。 目录结构如下所示。 src/main/assets/prod_data_file src/test/assets/test_data_file 但是,当我尝试通过getShadowApplication().getAssets().open(MY_FILE_PATH)读取文件时,它给了我FileNotFoundException 。 有人知道如何解决这个问题吗?

如何将Robolectric,Maven,ActionBarSherlock(最好是+ IntelliJ)集成到Android项目中?

我一直在撞墙一段时间试图让maven,robolectric,actionbar sherlock和intellij,所有人都玩得很好。 我现在已经放弃了与intellij一起建设并且专注于maven。 当我跳过maven构建中的测试时,我有一个带有操作栏的应用程序(这告诉我,我很高兴继续使用ActionBar集成前端)。 IntelliQ构建在ManifestParsingTest.java上失败,抱怨它不知道junit在哪里(以及其他问题)。 Robolectric集成 我已经在项目中成功运行了Robolectric。 我将Jake Wharton的要点中的文件复制到src/test/java/com/blah/blah/support/ (除了ShadowSherlockFragmentActivity.java src/test/java/com/blah/blah/support/shadows/ ShadowSherlockFragmentActivity.java )并放入我的自定义测试运行器的构造函数中的这一行(位于support文件夹中): ActionBarSherlock.registerImplementation(ActionBarSherlockRobolectric.class); mvn错误 我遇到了这些构建错误(IntelliJ也有相同的红色波浪形): [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:testCompile (default-testCompile) on project Blah: Compilation failure: Compilation failure: [ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/SherlockResourceLoader.java:[29,9] cannot find symbol [ERROR] symbol : constructor ResourceLoader(int,java.lang.Class,java.util.List,java.io.File) [ERROR] location: class com.xtremelabs.robolectric.res.ResourceLoader [ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/SherlockResourceLoader.java:[45,5] method does not override or implement a method from […]