Kotlin: unidad testing afirmar object después de gson

Tengo una testing JUnit así:

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

el service es Retrofit , que usa GsonConverter para deserializar json en

 data class ACategory(val id: String, val title: String, val parentId: String?, val hasChildren: Boolean) 

instancias.

La testing está pasando, incluso si ACategory llenó con id = null, title = null, etc.

Entonces, hasta donde sé, gson usa reflection, y kotlin resuelve estas restricciones de nulability en primer acceso.

¿Hay alguna manera de forzar esta resolución? ¿Alguna solución atractiva sin acceso directo a los campos de forma manual? Realmente no quiero escribir cada afirmación a mano.

Podrías usar la nueva reflexión de Kotlin. Si tiene una instancia de ACategory , llame

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

para acceder a todas las properties que están marcadas como no aceptan nulos y afirmar que no son nulas. Asegúrate de tener la reflexión lib en classpath.

Asegúrate de estar usando M14.

Terminamos con hack para classs de datos (solo caso de uso para nosotros, así que está bien).

Llamar a gsonConstructedObject.copy() revela todas las excepciones

  • ¿Cómo usar la expresión Lamba para hacer que las llamadas al método Java sean less detalladas en Kotlin?
  • Implementación de una anotación de Java en Kotlin
  • El tipo Out-Projected en la interfaz genérica prohíbe el uso de metod con un parámetro genérico
  • Cómo hacer la sum de elementos para la list múltiple en kotlin
  • Kotlin: NoClassDefFoundError - Android Studio muestra classs que no deberían estar allí
  • Referencia no resuelta de una function de extensión de Kotlin en la construcción de Gradle
  • ¿Por qué esta forma de generar aleatoriamente un gráfico es injusto?
  • Kotlin: ¿Cómo puedo usar la reflexión en los packages?
  • Implementación de interfaz de retorno con Kotlin y lambda
  • Kotlin flatMap - map
  • Retrollamada Glide después del éxito en Kotlin