8 pontos por ohjongin 2022-06-22 | 9 comentários | Compartilhar no WhatsApp

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

 
mse9000 2022-06-23

Código impossível de cobrir

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

 
youknowone 2022-06-23

Parece inverter as prioridades distorcer o código só para bater 100% no rastreamento de cobertura.

 
innoceive 2022-06-23

O código não estava distorcido. Apenas existe outro jeito, mais confortável do ponto de vista humano.

 
regentag 2022-06-23

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.

 
doldari 2022-06-22

A favor de testes 100%... de um jeito insano.

 
roxie 2022-06-23

kkkkkk

 
ganadist 2022-06-22

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

 
525hm 2022-06-22

Li bem o conteúdo no slash 21 haha

 
ohjongin 2022-06-22

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...