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()
显示所有异常
我有这样的 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()
显示所有异常