8 puntos por ohjongin 2022-06-22 | 9 comentarios | Compartir por WhatsApp

Incluso probar todas las ramas de un código Kotlin tan simple como este es extraordinariamente difícil, casi imposible. Esto se debe a que Kotlin, al compilar este código a bytecode, genera ramas que el autor del código no pretendía.

when(answer) {
"yes" -> true
else -> false
}

Aunque Kotlin ofrece muchas funciones convenientes para los desarrolladores que escriben código, al compilarlo a bytecode también genera muchas ramas que no son visibles para el usuario, como en este caso. jacoco, la herramienta de cobertura de pruebas más utilizada en la plataforma JVM, calcula la cobertura de ramas con base en el bytecode, por lo que puede exigir cubrir ramas que el desarrollador que usa Kotlin ni siquiera notó. Por eso, si un desarrollador de Kotlin intenta alcanzar 100% de cobertura de pruebas, en casos como este puede verse obligado a descompilar el código, y si tiene aún peor suerte, la descompilación puede fallar y entonces tendrá que revisar directamente el bytecode para confirmar qué ramas existen.

9 comentarios

 
mse9000 2022-06-23

Código imposible de cubrir

https://toss.im/slash-21/sessions/1-6

 
youknowone 2022-06-23

Forzar el código solo para marcar 100% en el seguimiento de cobertura da la sensación de poner el carro delante de los caballos.

 
innoceive 2022-06-23

El código no está torcido. Simplemente hay otra forma más cómoda desde una perspectiva humana.

 
regentag 2022-06-23

En el sector de defensa (sistemas de armamento), las directrices de la DAPA exigen una cobertura de código del 100%.
En la práctica es difícil alcanzar el 100%, pero tengo entendido que, en cambio, para cada parte que no se puede cubrir hay que agregar una explicación de por qué no puede cubrirse.

 
doldari 2022-06-22

Cobertura de código imposible

Ese asiento de 100% de pruebas de la locura…

 
roxie 2022-06-23

jajajaja

 
ganadist 2022-06-22

En los casos de ramas de enum / sealed / boolean, si no se manejan correctamente, el compilador cambió para que en Kotlin 1.6 aparezca una advertencia y a partir de 1.7 dé un error.

https://youtrack.jetbrains.com/issue/KT-47709

 
525hm 2022-06-22

Lo leí bien en slash 21 jaja

 
ohjongin 2022-06-22

Ah~ entonces era algo que salió en slash 21... Yo lo vi primero en el Twitter de un conocido... perdón por llegar tarde...