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

  • ¿Es posible express kotlin 'con' método equivalente en Scala?
  • Kotlin Propiedad Genérica
  • Kotlin start Application crash
  • ¿Cómo conseguir ARTE ALBUM de una canción de su path en kotlin?
  • El plugin de JaCoCo Gradle informa la proporción cubierta de class 0.0 para cada package
  • ¿Qué se puede express en una constante de time de compilation (const val)?
  • FragmentStatePagerAdapter for Nested Pager (en fragment de la navigation inferior) está vacío
  • No se puede comstackr el proyecto con Gradle y Kotlin
  • Sitio de Android: consulta de selección simple: no se puede acceder a la database en el hilo principal
  • No se puede proporcionar sin un método @ Provides-Anotado
  • Uso perezoso de Kotlin