我有这样的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懒惰地解决了第一次访问时的这种可空性限制。
有没有办法强迫这个决心? 一些好看的解决方案没有手动直接访问字段?我真的不想手工编写每一个断言。
答案 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.");
}
}
});
会显示所有异常