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

Dmi*_*nin 5 junit gson kotlin

我有这样的JUnit测试:

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

    subscriber.awaitTerminalEvent()

    subscriber.assertNoErrors()
}
Run Code Online (Sandbox Code Playgroud)

service是Retrofit,它使用GsonConverter反序列化json

data class ACategory(val id: String, val title: String, val parentId: String?, val hasChildren: Boolean)
Run Code Online (Sandbox Code Playgroud)

实例.

测试正在传递,即使ACategory填充了id = null,title = null等.

所以,据我所知,gson使用反射,kotlin懒惰地解决了第一次访问时的这种可空性限制.

有没有办法强迫这个决心?一些好看的解决方案没有手动直接访问字段?我真的不想手工编写每个断言.

Kir*_*man 1

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

ACategory::class.memberProperties
        .filter { !it.returnType.isMarkedNullable }
        .forEach {
            assertNotNull(it.get(aCategory))
        }
Run Code Online (Sandbox Code Playgroud)

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

确保您使用的是 M14。