Kotlin:在 gson 之后单元测试断言对象

Kotlin: unit test assert object after gson

我有这样的 JUnit 测试:

Test fun testCategoriesLoading() {
    val subscriber = TestSubscriber<List<ACategory>>()
    service.categories().subscribe(subscriber)

    subscriber.awaitTerminalEvent()

    subscriber.assertNoErrors()
}

服务是 Retrofit,它使用 GsonConverter 将 json 反序列化为

data class ACategory(val id: String, val title: String, val parentId: String?, val hasChildren: Boolean)

实例。

测试通过,即使 ACategory 填充了 id = null、title = null 等

因此,据我所知,gson 使用反射,而 kotlin 懒惰地解决了首次访问时的可空性约束。

有什么方法可以强制执行此解决方案吗? 一些漂亮的解决方案,无需手动直接访问字段?我真的不想手写每一个断言。

您可以使用新的 Kotlin 反射。如果您有 ACategory 的实例,请调用

ACategory::class.memberProperties
        .filter { !it.returnType.isMarkedNullable }
        .forEach {
            assertNotNull(it.get(aCategory))
        }

访问所有标记为不可为空的属性并断言它们不为空。确保你在类路径上有反射库。

确保您使用的是 M14。

我们最终破解了数据 类(仅供我们使用,所以没问题)。

调用 gsonConstructedObject.copy() 显示所有异常