Тесты не пройдены при тестировании помещения вставки с Rx - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь сделать простой тест CRUD для моей единственной сущности, но я не могу понять, что я сделал неправильно, таким образом, тест всегда терпит неудачу с AssertionError.

Это моя база данныхsetup:

@Database(entities = [Habit::class], version = 1)
@TypeConverters(Converter::class)
abstract class CareFlectDatabase : RoomDatabase() {
    abstract fun habitDao(): HabitDao
}

Entity:

@Entity(tableName = "user_habits")
data class Habit(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    val id: Long?,

    @ColumnInfo(name = "habit_title")
    val habitTitle: String?,

    @ColumnInfo(name = "start_date")
    val startDate: Date?,

    @ColumnInfo(name = "end_date")
    val endDate: Date?,

    @ColumnInfo(name = "receive_notification")
    val receiveNotification: Boolean?
)

А теперь тесты:

@Test
fun insertHabitTest() {
    //dependencies correctly instatiated
    //this line does complete
    habitDao.insertHabit(habit)

    habitDao.selectAll().test().assertValue { list ->
        //this line fails
        list.isNotEmpty()
    }
}

Мои дао-запросы:

@Query("SELECT * FROM user_habits")
fun selectAll(): Flowable<List<Habit>>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertHabit(habit: Habit): Completable

ЕслиЯ что-то упустил из зависимостей, пожалуйста, посмотрите на это:

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-rxjava2:$room_version"
testImplementation "androidx.room:room-testing:$room_version"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'

//tests
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test:core:1.2.0'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.28.2'

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

РЕШЕНО: Единственное, чего мне не хватало - это blockingAwait(), когда мой запрос INSERT происходит и тест проходит успешно.

Поэтому вместо:

habitDao.insertHabit(habit)

Должно быть:

habitDao.insertHabit(habit).blockingAwait()

Подробнее здесь .

0 голосов
/ 30 сентября 2019

Попробуйте что-то вроде

@Before
fun before() {
    RxAndroidPlugins.reset()
    RxJavaPlugins.reset()

    RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
    RxAndroidPlugins.setInitMainThreadSchedulerHandler {
        Schedulers.trampoline()
    }
}
@Test
fun insertHabitTest() {
    //dependencies correctly instatiated
    //this line does complete
    habitDao.insertHabit(habit).subscribeOn(Schedulers.io()).subscribe()

    val observer = habitDao.selectAll().subscribeOn(Schedulers.io()).test()
    observer.awaitTerminalEvent()


    observer.assertNoErrors().assertValue { list ->
    //this line fails
    list.isNotEmpty()
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...