Тестовая комната в Android (Котлин) - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь протестировать базу данных 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()
    {
    }
}
...