Combine security nula y assertNotNull

En la testing usualmente tenemos assertNotNull , pero no realiza un lanzamiento inteligente desde un tipo que assertNotNull hasta un modo que no assertNotNull . Tengo que escribir algo como esto:

 if (test == null) { Assert.fail("") return } 

¿Es una solución alternativa realizar un lanzamiento inteligente solo con la llamada a assertNotNull ? ¿Cómo lo afrontas?

Lamentablemente, los cuerpos de las funciones a las que llama, incluidas las funciones en línea, no se utilizan para los moldes inteligentes y la inferencia de nulabilidad.

No hay mucho en su código que pueda mejorarse, y solo sugeriría una cosa: puede usar el operador de Elvis con una function Nothing para esas afirmaciones de afirmación. El análisis de flujo de control tiene en count las twigs que dan como resultado Nothing e infiere la nulabilidad de eso:

 fun failOnNull(): Nothing = throw AssertionError("Value should not be null") 

 val test: Foo? = foo() test ?: failOnNull() // `test` is not-null after that 

Esto también se puede escribir sin una function: test ?: throw AssertionError("...") , porque una expresión throw también tiene type Nothing .


Hablando de un caso más general de falla en una afirmación, uno podría usar una function de fail(...): Nothing , que también proporciona una pista extra para el análisis de flujo de control. El JUnit Assert.fail(...) no es una function Nothing , pero puede encontrar una en el kotlin-test-junit o escribir la suya propia.

 test as? SomeType ?: fail("`test` should be an instance of SomeType") // smart cast works here, `test` is `SomeType` 
  • ¿Cuándo debería usar let {} y cuando simplemente! = Null
  • Kotlin security nula?
  • ¿Cómo probar idiomáticamente cadenas no nulas y no vacías en Kotlin?
  • kotlin reflexión verificación nullable types
  • ¿Cómo definir un miembro delegado que se puede anotar en Kotlin?
  • Conversor de Java a Kotlin y arguments de método nulable
  • function kotlin devuelve nulo
  • Kotlin con si no es nulo
  • La mejor forma de comprobar null en kotlin?
  • Excepción del puntero nulo trabajando con Map (Kotlin)
  • Afirmación no nula de Kotlin en nulo