Código impossível de cobrir
(blog.npcode.com)Mesmo um código Kotlin simples como este é difícil a ponto de ser quase impossível testar todos os ramos. Isso acontece porque, ao compilar esse código para bytecode, o Kotlin cria ramos que o autor do código não pretendia.
when(answer) {
"yes" -> true
else -> false
}
Ao mesmo tempo em que oferece muitos recursos convenientes para quem escreve o código, o Kotlin também gera, ao ser compilado em bytecode, muitos ramos como esses que não ficam visíveis para o usuário. O JaCoCo, a ferramenta de cobertura de testes mais usada na plataforma JVM, calcula a cobertura de branches com base no bytecode, então pode exigir a cobertura de branches que o desenvolvedor que usa Kotlin nem percebeu que existiam. Por isso, se um desenvolvedor Kotlin tentar atingir 100% de cobertura de testes, em casos como esse talvez precise descompilar o código; e, se tiver ainda menos sorte, a descompilação pode falhar e ele acabar tendo de examinar diretamente o bytecode para verificar quais branches existem.
9 comentários
Código impossível de cobrir
https://toss.im/slash-21/sessions/1-6
Parece inverter as prioridades distorcer o código só para bater 100% no rastreamento de cobertura.
O código não estava distorcido. Apenas existe outro jeito, mais confortável do ponto de vista humano.
Na área de defesa (sistemas de armas), as diretrizes da DAPA exigem 100% de cobertura de código.
Na prática, é difícil atingir 100%, mas, pelo que sei, em vez disso é preciso explicar, um por um, por que os trechos não cobertos não podem ser cobertos.
A favor de testes 100%... de um jeito insano.
kkkkkk
Nos casos de ramificação de
enum/sealed/boolean, se não forem tratados corretamente, o compilador foi alterado para emitir um aviso no Kotlin 1.6 e, a partir do 1.7, um erro.https://youtrack.jetbrains.com/issue/KT-47709
Li bem o conteúdo no slash 21 haha
Ah~ então era algo que saiu no slash 21... Eu vi pela primeira vez no Twitter de um conhecido... desculpa por estar chegando atrasado...