Geração e execução de testes unitários com o Randoop e EvoSuite em um projeto maven pelo terminal do Linux.
O GitHub Codespaces é um ambiente de desenvolvimento instantâneo e baseado na nuvem que usa um contêiner para fornecer linguagens, ferramentas e utilitários de desenvolvimento comuns. Ele é gratuito e oferece um terminal linux com uma serie de pacotes utilitario já pré-instalados, como o Sdkman que vamos usar para mudar a versão do java e do maven no nosso ambiente de desenvolvimento.
Antes de prosseguir faça um fork desse repositório na sua conta, para que você consiga fazer os commits das suas alterações e futuramente possa baixar o repositório p fazer o envio da atividade.
Para fazer o fork deste repositório, usando o seu navegador vá para a raiz do repositorio remoto. Clique em "Fork", quando você for redirecionado para outra pagina clique em "Create Fork"
No seu navegador vá para a raiz do repositorio remoto navegue pelos seguintes menus CODE > Codespaces > Create a codespace on main.
Se tudo der certo você irá se deparar com um editor de codigo similar ao VS Code no seu navegador como na imagem abaixo.
Com o codespace criado vamos configurar a versão do java e do maven.
sdk install java 8.0.422-tem
sdk default java 8.0.422-tem
sdk install maven 3.6.3
sdk default maven 3.6.3
Agora você está com um ambiante no codespaces configurado para poder continuar seguindo passo a passo para gerar e executar testes unitario com o Randoop e EvoSuite. Pode pular a criação do projeto maven e ir direto para Rodando o Randoop ou para Rodando o EvoSuite.
Sdkman é um gerenciador de SDK's (Software Development Kit) que pode ser utilizado para instalar diferentes versões do Java e trocar facilmente de uma versão para a outra.
Similar ao NVM para Node.
versão do Java que utilizei: 8.0.422-tem
Recomendo criar um projeto com o Java 8, para não precisar mudar de versão para executar o Randoop e o EvoSuit. Além disso tive algumas dificuldades para gerar testes para pacotes com recursos de versões mais atuais do Java como Records por exemplo.
$ mvn -version
Apache Maven 3.6.3
mvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.0 -DinteractiveMode=false
Copie o pom.xml desse projeto, alterando de acordo com o seu projeto os atributos de groupId, artifactId e name.
Copie os arquivos .jar evosuite-1.0.6.jar e randoop-all-4.3.3.jar para a raiz do seu projeto.
mvn install
mvn clean package
java -Xmx3000m -classpath ./randoop-all-4.3.3.jar:./target/classes randoop.main.Main gentests --testclass=com.example.Conta --output-limit=100 --junit-output-dir=./src/test/java --junit-package-name=com.example
java -Xmx3000m -classpath ./randoop-all-4.3.3.jar:./target/classes randoop.main.Main gentests --test-package=com.example --output-limit=100 --junit-output-dir=./src/test/java --junit-package-name=com.example
mvn test
https://randoop.github.io/randoop/manual/index.html#command-line-options
mvn clean package
java -jar ./evosuite-1.0.6.jar -class com.example.Conta -projectCP ./target/classes
java -jar ./evosuite-1.0.6.jar -prefix com.example -projectCP ./target/classes
find ./evosuite-tests/com/example -type f -name "*.java" -exec cp {} ./src/test/java/com/example/ \;
mvn test