java - 有没有人用 couchbase-lite-android 1.02 实现了 robolectric 2.3?

标签 java android couchbase robolectric

我有一个项目,我已经实现了 couchbase-lite-android 并且它工作得很好,但是......我一直在尝试添加 Robolectric 来添加单元和组件测试但是没有任何运气这两个一起工作。目前我收到以下问题。

调试:从 jar:C:\Users\brad.m2\repository\org\robolectric\android-all\4.3_r2-robolectric-0\android-all-4.3_r2-robolectric-0.jar 加载资源!/res...

java.lang.UnsatisfiedLinkError: no com_couchbase_touchdb_TDCollateJSON in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at com.couchbase.touchdb.TDCollateJSON.(TDCollateJSON.java:36)
at com.couchbase.lite.android.AndroidSQLiteStorageEngine.open(AndroidSQLiteStorageEngine.java:46)
at com.couchbase.lite.Database.open(Database.java:911)
at com.couchbase.lite.Manager.getDatabase(Manager.java:227)
at com.snapterm.core.models.transaction.TransactionsDb.initDatabase(TransactionsDb.java:61)
at com.snapterm.core.models.transaction.TransactionsDb.(TransactionsDb.java:49)
at com.snapterm.core.models.transaction.TransactionsDb.getInstance(TransactionsDb.java:41)
at com.snapterm.core.SnapTerm.onCreate(SnapTerm.java:42)
at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:164)
at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:430)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:236)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

无论我如何手动尝试加载这个库,我都没有运气修复这个错误。我认为这是 Robolectric 查找 native 库的当前限制,但我很好奇是否有人同时尝试过这两者并使它们成功运行。

最佳答案

我从来没有能够围绕 Couchbase 实现 Robolectric 测试覆盖,但是你可以在同一个项目中使用 Couchbase 和 Robolectric,前提是你使用诸如 Dagger 之类的依赖注入(inject)。您需要做的是围绕您使用的所有 Couchbase 元素定义接口(interface),并在您需要使用 Couchbase 的那些方面时在您的任何应用程序代码中使用接口(interface)。然后,为了让 Robolectric 工作,您在测试模块中实现接口(interface)的测试版本。

最后一步是使用 Dagger 将实际的 Couchbase 类注入(inject)到主应用模块中,然后将测试版本注入(inject)到测试应用模块中。这将允许您通过模拟数据库层来围绕代码编写测试。

关于java - 有没有人用 couchbase-lite-android 1.02 实现了 robolectric 2.3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609574/

相关文章:

java - QR 码扫描仪库支持 Marshmallow?

java - Spring JPA 和 Couchbase - com.couchbase.client.java.error.ViewDoesNotExistException : View cat/all does not exist

hibernate - memcached作为hibernate L2层缓存

java - 缺少通过 Java-Wrapper 将表达式添加到 Z3 的批量模式

java - 为 paintComponent(Graphics g) 使用 Thread.sleep() 的时间延迟未按预期工作

Java字符串数组: is there a size of method?

java - 将 UTF-8 PDF 字体获取到用 Java/Spring 编译的 JasperReports 3.7.* 报告中

android - 如何为具有不同 cpu 架构的相同 apk 文件创建不同的版本号

android: jetpack compose lazycolumn

Couchbase View 结果未随新添加的文档一起返回