Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有人用couchbase lite android 1.02实现过robolectric 2.3吗?_Java_Android_Couchbase_Robolectric - Fatal编程技术网

Java 有人用couchbase lite android 1.02实现过robolectric 2.3吗?

Java 有人用couchbase lite android 1.02实现过robolectric 2.3吗?,java,android,couchbase,robolectric,Java,Android,Couchbase,Robolectric,我有一个项目,我已经实现了couchbase lite android,但它运行得非常好。。我一直在尝试添加Robolectric来添加单元和组件测试,但没有任何运气让这两个一起工作。目前我收到以下问题 调试:从jar加载android资源:C:\Users\brad.m2\repository\org\roblectric\android all\4.3\u r2-roblectric-0\android-all-4.3\u r2-roblectric-0.jar/研究 java.lang.U

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

调试:从jar加载android资源:C:\Users\brad.m2\repository\org\roblectric\android all\4.3\u r2-roblectric-0\android-all-4.3\u r2-roblectric-0.jar/研究

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查找本地LIB的局限性,但我很好奇是否有人尝试过这两种方法并使其成功运行。

我从未能够在Couchbase周围实现Robolectric测试覆盖,但是,如果您使用的是依赖项注入(dependency injection),则可以在同一项目中使用Couchbase和Robolectric,例如Dagger。您需要做的是围绕您使用的Couchbase的所有元素定义接口,并且在任何应用程序代码中,当您需要使用Couchbase的这些方面时,您将使用接口。然后,为了让Robolectric工作,您需要在测试模块中实现接口的测试版本


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

您是否设法使其正常工作?@drspaceboo发布了此问题的解决方案,它对我有效。感谢您让我知道。我们已经离开了机器人分子实验室。我们希望能够测试Couchbase本身,而不是将其抽象出来,这样我们就不会在测试中使用它。@drspaceboo我也考虑过这一点,但在查看Couchbase之后,我意识到他们自己对代码进行测试。因此,通过对其进行抽象,我仍然能够测试代码的行为,并保持Robolectric的效率。这并不完全是一个理想的解决方案,但它目前仍然有效,我希望它在将来不会成为问题。我尝试了一下,并不得不围绕我使用的所有Couchbase对象编写包装器类。在更改代码以使用这些包装器之后,Robolectric能够运行。我正在使用Dagger注入我的数据源,到目前为止,我的测试正在运行,所以感谢您的建议!