Kotlin:单元测试在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()
显示所有异常