尝试对对 Realm (0.87.4) 进行一些调用的类进行单元测试,测试设置失败并显示
java.lang.NoClassDefFoundError: rx/Observable$OnSubscribe
at io.realm.RealmConfiguration$Builder.<init>(RealmConfiguration.java:279)
at org.testapp.db.MyClassTest.setUp(MyClassTest.java:34)
...
Caused by: java.lang.ClassNotFoundException: rx.Observable$OnSubscribe
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
我的测试课开始于:
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest extends TestCase {
@Rule
public TemporaryFolder testFolder = new TemporaryFolder();
Realm realm;
@Before
public void setUp() throws Exception {
File tempFolder = testFolder.newFolder("realmdata");
RealmConfiguration config = new RealmConfiguration.Builder(tempFolder).build();
realm = Realm.getInstance(config);
}
...
我的等级有:
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.10.19"
testCompile "org.robolectric:robolectric:3.0"
compile 'io.realm:realm-android:0.87.4'
怎么解决这个问题呢?
=== 编辑 1 ===
我添加到我的 gradle 中:
testCompile 'io.reactivex:rxjava:1.1.0'
and
android {
// ...
testOptions {
unitTests.returnDefaultValues = true
}
}
新的错误是
java.lang.UnsatisfiedLinkError: no realm-jni 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 io.realm.internal.RealmCore.loadLibrary(RealmCore.java:117)
在您正在测试的类中使用 Realm 时,单元测试很困难或不可能(感谢 Dmitry 提及)。我能做的就是将测试作为工具测试来运行(感谢 Dmitry,Christian)。
这很简单,我不必对测试方法进行任何更改......
A. 将测试类移至“androidTest”文件夹,而不是“test”。 (从 Android Studio 1.1 开始,您应该将单元测试放在 /src/test 中,将 Android Instrumentation 测试放在 /src/androidTest 中)
B. 在 gradle 构建文件中添加工具测试的依赖项,使用“androidTest”,因为它们是工具性的:
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'io.reactivex:rxjava:1.1.0'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support:support-annotations:23.1.1'
C. 在测试类中,将顶部的运行程序替换为 AndroidJUnit4:
@RunWith(AndroidJUnit4.class)
public class MyClassTest extends TestCase {
...
创建一个“Android Tests”类型的 Android 运行配置,运行它,瞧,它现在可以很好地测试相同的方法,但在设备上。让我非常高兴。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)