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

标签 junit gson kotlin

我有这样的 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/

相关文章:

java - 从 Json 对象中提取数组

kotlin - arrayListOf 和 mutableListOf 有什么区别,哪个更好?

java - 带有 Jacoco 插件的 build.gradle 不会为集成测试生成覆盖率报告

java - 如何使用 Powermock、easymock、mockito 进行单元测试 DriverManager.getConnection ("") 或 DriverManager.getConnection ("","","") 调用

java - JSON 格式错误和 “Expected BEGIN_OBJECT but was STRING at line 1 column 1” 错误

android - 收到错误 Room 无法验证数据完整性......即使在添加 fallbackToDestructiveMigration() 之后

java - 为什么某些 Java 函数能够更改不可变的 Kotlin 对象?

spring - 如何为多个测试类加载一次应用程序上下文

java - mvn 测试未找到 junit 测试

java - 如何在 java 中使用 com.google.gson.JsonObject 将值设置为 null?