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

时间:2015-06-29 17:45:53

标签: 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懒惰地解决了第一次访问时的这种可空性限制。

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

2 个答案:

答案 0 :(得分:1)

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

ACategory::class.memberProperties
        .filter { !it.returnType.isMarkedNullable }
        .forEach {
            assertNotNull(it.get(aCategory))
        }

访问标记为不可为空的所有属性,并声明它们不为空。确保你在类路径上有反射库。

确保您使用的是M14。

答案 1 :(得分:0)

我们最终得到了数据类的hack(只有我们的用例,所以没问题。)

调用ParseQuery<ParseObject> query = ParseQuery.getQuery("YourClassName"); query.whereStartsWith("username", "abc"); query.findInBackground(new FindCallback<ParseObject>() { public void done(List<ParseObject> object, ParseException e) { if (object == null) { Log.d("score", "The getFirst request failed."); } else { Log.d("score", "Retrieved the object."); } } }); 会显示所有异常