Intereting Posts
Как я могу создавать HTML-страницы, которые автоматически корректируют свои изображения на разные размеры экрана для мобильных устройств? Android & Phonegap: ошибка возникает при загрузке функции javascript с помощью loadUrl Предоставить системные разрешения для приложения в эмуляторе Android Ошибка: «повторная запись: андроид / поддержка / v7 / appcompat / R $ anim.class» Android sdk cut / trim видеофайл Как получить мое собственное значение атрибута в моем стиле Перезапустите службу, даже если приложение отключено и продолжает работать в фоновом режиме даже после закрытия приложения How? Как я могу получить файл из CamScanner или Office Lens в веб-приложении на Android? Добавить объект в ArrayList по указанному индексу Оценка ошибки разбора XML: префикс не должен привязываться к одному из зарезервированных имен пространства имен Индикаторы прокрутки Overscroll с клипом для заполнения Не запрашивайте Window.FEATURE_ACTION_BAR и установите для windowActionBar значение false в вашей теме, чтобы вместо этого использовать панель инструментов Могу ли я использовать полимерные / веб-компоненты в родном андроидном приложении без Cordova? Как сделать из дерева андроидов с градиентом Android: Как использовать пользовательские цвета?

Тестирование на Realm Unit на Android

Пытаясь выполнить единицу тестирования класса, который выполняет некоторые вызовы в 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 ===

Я добавил к своей градиенте:

 testCompile 'io.reactivex:rxjava:1.1.0' 

а также

 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 в классе, который вы тестируете (спасибо Дмитрию за упоминание). Я могу сделать тесты как инструментальные тесты (спасибо, Дмитрий, Кристиан).

И это довольно просто, мне не придется ничего менять для методов тестирования …

A. Переместите тестовый класс в папку «androidTest» вместо «test». (Начиная с Android Studio 1.1 вы должны поместить свои юнит-тесты в / src / test и Android Instrumentation Tests in / src / androidTest)

B. Добавьте зависимости для инструментальных тестов в файле построения градиента, используйте «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 для Android типа «Android Tests», запустите ее и вуаля, она проверит те же методы сейчас, но на устройстве. Меня очень радует.

Начиная с Realm 0.87, вам также необходимо включить RxJava в ваши зависимости:

 compile 'io.reactivex:rxjava:1.1.0'