Tal como tinha referido, estive a fazer uns testes e a correr a versão atual do EvoSuite localmente para ver se econtrava alguns erros. Por acaso, até encontrei um problema relacionado com o smell "RottenGreenTests".
O erro surge porque a contagem dos smells dá um valor negativo e, ao tentar normalizar o resultado, há uma exceção porque não pode ser feita a normalização de valores negativos. Para começar, este é o código que está a dar problemas:
O problema surge porque, por alguma razão, size == firstException. Ora, sendo que firstException corresponde a uma posição, então sabemos que firstException < size. Até pensei que isto podia acontecer porque o test case estava vazio, mas essa situação já está coberta nos unit tests e não dá problemas. Fiz uns prints e os problemas estão a surgir com tamanhos completamente aleatórios: no último caso, o test case tinha size 30...
Tentei recriar o problema com classes dummy, mas não tive sucesso.
Assim sendo, estou a pensar adicionar mais um if para verificar se size > firstException. Acho que é uma solução um pouco "bruta", mas não entendo mesmo a causa do problema. Será que o EvoSuite está a remover statements e não está a atualizar o "lastExecutionResult"? Eu pensava que nesse caso "lastExecutionResult" ficava a null...
Tal como tinha referido, estive a fazer uns testes e a correr a versão atual do EvoSuite localmente para ver se econtrava alguns erros. Por acaso, até encontrei um problema relacionado com o smell "RottenGreenTests".
O erro surge porque a contagem dos smells dá um valor negativo e, ao tentar normalizar o resultado, há uma exceção porque não pode ser feita a normalização de valores negativos. Para começar, este é o código que está a dar problemas:
O problema surge porque, por alguma razão, size == firstException. Ora, sendo que firstException corresponde a uma posição, então sabemos que firstException < size. Até pensei que isto podia acontecer porque o test case estava vazio, mas essa situação já está coberta nos unit tests e não dá problemas. Fiz uns prints e os problemas estão a surgir com tamanhos completamente aleatórios: no último caso, o test case tinha size 30...
Tentei recriar o problema com classes dummy, mas não tive sucesso.
Assim sendo, estou a pensar adicionar mais um if para verificar se size > firstException. Acho que é uma solução um pouco "bruta", mas não entendo mesmo a causa do problema. Será que o EvoSuite está a remover statements e não está a atualizar o "lastExecutionResult"? Eu pensava que nesse caso "lastExecutionResult" ficava a null...