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