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` 
  • La mejor forma de comprobar null en kotlin?
  • ¿Cuándo debería usar let {} y cuando simplemente! = Null
  • Error de compilation de la llamada insegura de Kotlin en un receptor nulo después de un control nulo
  • Cómo establecer la propiedad de Kotlin tardía en nulo
  • ¿Hay alguna manera de crear una matriz no nula a partir de un range?
  • Confundido acerca de la security nula en Kotlin
  • Kotlin null-safety para properties de class
  • Kotlin comtesting null dos veces en caso de que no
  • Kotlin - lateinit VS Cualquiera? = nulo
  • Manera idiomática de manejar lists anulables o vacías en Kotlin
  • Requerir en la superclass 'init block plantea IllegalArgumentException