2

我正在尝试测试我的 UI 层和我的域层之间的映射器功能。

但是我得到了一个异常java.lang.IllegalStateException: Not in a frame

如果我将 UIModel 更改为 aval而不是 a ,此异常就会消失,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)
4

1 回答 1

1

我遇到了同样的问题。这是我想出的:我必须初始化我的模型对象,这些对象@Model在调用setContent().

Google 的JetNews示例带有ComposeTestRule.launchJetNewsApp()JetnewsUiTest.setUp(). 他们的测试类充分利用了 androidx.ui:ui-test 的东西,包括createComposeRule(). 你可能想看看它。

于 2020-04-07T19:05:28.703 回答