Неразрешенная ссылка: тестирование

Я пытаюсь написать простой интеграционный тест в моем текущем проекте Android, полностью написанном в Котлине.

Проблема в том, что тест не запускается и не запускается со следующей ошибкой:

Error:(4, 36) Unresolved reference: testing
Error:(18, 52) Unresolved reference: InstantTaskExecutorRule
Error:Execution failed for task ':app:kaptGenerateStubsDebugAndroidTestKotlin'.
> Compilation error. See log for more details

Я пробовал искать эту проблему, но безуспешно.

Шаги, которые я уже пробовал:

  1. Проверьте, установлена ли библиотека, содержащая InstantTaskExecutorRule, и я могу погрузиться в этот пакет (да, я могу)
  2. Проверьте, помещен ли мой тест в правильную папку (да, это в androidTest)
  3. Проверьте, правильно ли я запускаю свои тесты (возможно, я запускаю их по щелчку пакета pkgName (androidTest) а затем "Запуск тестов в...")

Я также попытался переименовать свои исходные dirs в koltin из java и установить правильные значения в sourceSets но изменил его обратно из-за отсутствия успеха, и счел это не повод.

Важное замечание:

Если я закомментируйте строки import android.arch.core.executor.testing.InstantTaskExecutorRule и весь код, связанный с InstantTaskExecutorRule ( это означает, что весь тест логик будет пустым) и поместить простой assert, например, то все работает нормально.

Но я хочу использовать этот конкретный InstantTaskExecutorRule и хотел бы знать, в чем проблема и как ее решить, или, по крайней мере, знать, где я должен искать и что.

Вот мой тестовый код:

import android.arch.core.executor.testing.InstantTaskExecutorRule
import android.arch.persistence.room.Room
import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4

import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import com.myapp.storage.base.AppDataBase


@RunWith(AndroidJUnit4::class)
class UserDaoTest{
    @JvmField @Rule val instantTaskExecutorRule = InstantTaskExecutorRule()

    private lateinit var db: AppDataBase

    @Before
    @Throws(Exception::class)
    fun setUp(){
        db = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getContext(), AppDataBase::class.java)
                .allowMainThreadQueries()
                .build()
    }

    @After
    fun closeDB(){
        db.close()
    }

    @Test
    fun getUsersWhenNoUserInserted(){
        db.userDao().allUsers()
                .test().assertNoValues()
    }

}

Ответы

Ответ 1

Согласно официальной документации Google, мы должны добавить наших помощников по тестированию для компонентов архитектуры (LiveData) следующим образом:

// Test helpers for LiveData
testImplementation "android.arch.core:core-testing:1.1.0"

И по крайней мере для меня это просто не работает. (см. вопрос выше)

Как это должно быть на самом деле:

// Test helpers for LiveData
androidTestImplementation "android.arch.core:core-testing:1.1.0"

Теперь все работает просто отлично!

Ответ 2

Я просто столкнулся с той же проблемой, потому что я импортировал более новую версию junit, 4.13-beta-3. После перехода на версию 4.12 все было хорошо.

testImplementation "junit:junit:$junit

Я надеюсь, что это может быть полезно для других.