Неразрешенная ссылка: тестирование
Я пытаюсь написать простой интеграционный тест в моем текущем проекте 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
Я пробовал искать эту проблему, но безуспешно.
Шаги, которые я уже пробовал:
- Проверьте, установлена ли библиотека, содержащая InstantTaskExecutorRule, и я могу погрузиться в этот пакет (да, я могу)
- Проверьте, помещен ли мой тест в правильную папку (да, это в
androidTest
) - Проверьте, правильно ли я запускаю свои тесты (возможно, я запускаю их по щелчку пакета
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
Я надеюсь, что это может быть полезно для других.