Как проверить классы данных @Model из Jetpack Compose? - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь протестировать функцию отображения между моим слоем пользовательского интерфейса и слоем домена.

Но я получаю исключение java.lang.IllegalStateException: Not in a frame

Это исключение исчезает, если я изменяю свою UIModel на val вместо var, но тогда это бесполезно с Обновления модели, которые предлагает Jetpack Compose.

Есть ли способ проверить этот тип картографа?

import androidx.compose.Model
import org.junit.Assert.assertEquals
import org.junit.Test

class DataModelMapperTest {

    @Test
    fun `data model to ui model`() {
        val model = DataModel(5)
        val uiModel = UIModel(5)

        assertEquals(uiModel, model.toUIModel())
    }

    @Test
    fun `ui model to data model`() {
        val model = DataModel(5)
        val uiModel = UIModel(5)

        assertEquals(model, uiModel.toDataModel())
    }

}

@Model
data class UIModel(var value: Int)

data class DataModel(val value: Int)

fun DataModel.toUIModel(): UIModel = UIModel(this.value)

fun UIModel.toDataModel(): DataModel = DataModel(this.value)

1 Ответ

1 голос
/ 07 апреля 2020

Я столкнулся с той же проблемой. Вот что я понял: мне нужно инициализировать объекты моей модели, которые отмечены @Model в (или, возможно, после) вызова setContent().

Образец Google JetNews поставляется с ComposeTestRule.launchJetNewsApp() функция, которая вызывается JetnewsUiTest.setUp(). Их тестовый класс поставляется с полным использованием androidx.ui: UI-Test материал, включая createComposeRule(). Возможно, вы захотите взглянуть на это.

...