【发布时间】:2020-01-28 04:06:51
【问题描述】:
我正在尝试测试我的 UI 层和我的域层之间的映射器功能。
但是我得到了 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)
【问题讨论】:
-
看来
@Model的注释处理器仍在被调用,并且正在生成一些不能很好地与单元测试配合使用的东西。如果您切换到仪器测试,我相信您可以利用编写 Compose 测试的秘诀。可能最终也会有单元测试解决方案,但我认为我们距离获得稳定的 Compose 版本还有很长的路要走,所以暂时会有这些限制。 -
小笨蛋:它不是一个注解处理器,它是一个编译器插件。 Compose 不使用任何注释处理器。
标签: android testing kotlin android-jetpack-compose