Я пытаюсь протестировать базу данных Room в Android, написанную на Kotlin, локально ; это не на эмуляторе и без инструментального тестирования. Насколько я понимаю, это возможно при использовании Roboelectric Framework, но у меня возникли некоторые проблемы с этим:
Как выбрать подходящий класс для RunWith(CLASS)
декоратора?
Я понимаю, что AndroidJUnit4
необходим для инструментальных тестов, учитывая, что это локальный тест, который я должен использовать вместо JUnit4
или другого производного от RoboElectric.
Как правильно определить context
?
Попытка InstrumentationRegistry.getTargetContext()
требует, чтобы я использовал InstrumentationRegistry
, который недоступен при локальном тестировании или что test
нельзя импортировать при импорте androidx.test.platform.app.InstrumentationRegistry
или android.support.test.InstrumentationRegistry
. Попытка ApplicationProvider.getApplicationContext()
утверждает, что ссылка getApplicationContext
не может быть найдена. Я также не уверен, куда мне следует импортировать InstrumentationRegistry
или ApplicationProvider
из.
В общем, мне сложно определить подходящие библиотеки для использования в Java; вся документация выглядит очень зависящей от версии и предполагает, что вы волшебным образом знаете, куда импортировать данный класс, откуда часто такие классы появляются в нескольких библиотеках. Тогда пакет, импортированный через gradle, также, кажется, хорошо связан, но явно не соответствует импортируемому пакету. Если у вас есть какие-либо общие советы по этому вопросу, я бы очень хотел их услышать.
Пока мой код выглядит следующим образом:
package com.manaikan.airvendor.AirTime
import android.content.Context
import android.arch.persistence.room.Room
import androidx.test.platform.app.InstrumentationRegistry
import com.manaikan.airvendor.airtime.AirVendorDatabase
import com.manaikan.airvendor.airtime.BundleQuery
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import java.io.IOException
// Roboelectric
import androidx.test.core.app.ApplicationProvider
@RunWith(JUnit4::class)
class BundleTest {
private lateinit var queryset : ENTITYDao
private lateinit var database : APPLICATIONDatabase
@Before
fun setup()
{
val context = ApplicationProvider.getApplicationContext<Context>()
database = Room.inMemoryDatabaseBuilder(context, APPLICATIONDatabase::class.java)
.allowMainThreadQueries()
.build()
queryset = database.bundleQuery()
}
@After
@Throws(IOException::class)
fun tearDown()
{
database.close()
}
@Test
@Throws(Exception::class)
fun review()
{
}
}