我有这样的 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。
关于junit - Kotlin:gson 之后的单元测试断言对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31122224/