{"id":17644476,"url":"https://github.com/hussani/java-test-generator","last_synced_at":"2025-07-06T07:02:55.334Z","repository":{"id":142593173,"uuid":"378756811","full_name":"hussani/java-test-generator","owner":"hussani","description":"Automatic test generator using constraint programming","archived":false,"fork":false,"pushed_at":"2021-07-07T03:36:45.000Z","size":71,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-03T15:58:50.073Z","etag":null,"topics":["code-generation","constraint-programming","testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hussani.png","metadata":{"files":{"readme":"README-pt_BR.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-20T23:14:44.000Z","updated_at":"2021-07-30T23:41:54.000Z","dependencies_parsed_at":"2023-03-14T23:31:19.445Z","dependency_job_id":null,"html_url":"https://github.com/hussani/java-test-generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hussani/java-test-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussani%2Fjava-test-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussani%2Fjava-test-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussani%2Fjava-test-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussani%2Fjava-test-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hussani","download_url":"https://codeload.github.com/hussani/java-test-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussani%2Fjava-test-generator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261255904,"owners_count":23131478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-generation","constraint-programming","testing"],"created_at":"2024-10-23T10:05:45.492Z","updated_at":"2025-06-22T07:37:13.023Z","avatar_url":"https://github.com/hussani.png","language":"Java","readme":"# Java Test Generator\nGerador de testes automatizados utilizando programação por restrições.\n\nEsta é a solução para um dos projetos da disciplina [SIN5022](https://uspdigital.usp.br/janus/componente/disciplinasOferecidasInicial.jsf?action=3\u0026sgldis=SIN5022) discipline.\n\n[Read in English here](./README.md)\n## Introdução\n\nEste projeto faz geração de testes automatizados utilizando de um código-fonte Java. \n\nO código-fonte é analisado, parseado e então o programa cria um Gráfico de Fluxo de Controle (GFC) para cada método. Para cada GFC o gerador de caminhos lista todos os caminhos possíveis. Cara caminho possui um conjunto de expressões (ex. expressões aritiméticas ou lógicas).\nEstas expressões são convertidas em restrições e resolvidas pelo programa. Após as restrições serem resolvidas os parâmetros de entrada e retornos de cada GFC são estimados e utilizados geração de testes.\n\n## Como utilizar\n\n### Requerimentos\n- Java (JDK11+)\n- Maven\n\n### Instalação\n\nFaça o download do projeto e execute os comandos abaixo.\n\n```shell\nmvn clean install\nmvn package\n```\n\nEste processo irá gerar um arquivo `jar` com a aplicação.\n\n### Executando\n\nO comando a seguir cria um teste para o arquivo informado.\n```shell\njava -jar target/java-test-generator-0.1.0-SNAPSHOT.jar \u003ccaminho do arquivo java\u003e\n```\nO nome do arquivo gerado por padrão é o nome da classe, acrescido do sufixo \"Test.java\".\n\nVocê pode alterar o nome do arquivo gerado informando um segundo argumento na execução,\ncomo demonstrado no comando abaixo.\n```shell\njava -jar target/java-test-generator-0.1.0-SNAPSHOT.jar src/test/resources/If4Paths.java OutputFile.java\n```\n\nNeste vídeo são apresentados algumas entradas, resultados e como instalar e executar o programa. (Abre em uma nova aba)\n\n\u003ca href=\"https://asciinema.org/a/424206\" target=\"_blank\"\u003e\u003cimg src=\"https://asciinema.org/a/424206.svg\" /\u003e\u003c/a\u003e\n\n## Limitações\nEste projeto não avançou muito na criação de GFC para todas as instruções Java válidas.\nAtualmente a aplicação permite o uso de declarações `if` limitadas com:\n- uma única expressão binária;\n- sem block de `else`;\n- com operadores inteiros.\n\nO programa também permite o uso de declarações de retorno com literais inteiros ou expressões aritméticas.\n\n## Melhorias futuras\n- uso de expressões binárias com outras expressões binárias dentro\n- uso de expressões else\n- uso de laços (for, while)\n- implementar exceções melhores\n- melhorar o uso geral de estruturas de dados\n- implementar testes unitários mais assertivos\n- utilizar melhor o padrão visitor nos nós da árvore sintática abstrata\n- uso de tipos genéricos nos vértices e arestas da GFC\n\n## Bibliotecas open source utilizadas\n- [javaparser](https://github.com/javaparser/javaparser) - Utilizada para fazer parse da árvore sintática abstrata e para gera código de teste\n- [choco-solver](https://github.com/chocoteam/choco-solver/) - Utilizada para resolver restrições\n- [jgrapht](https://github.com/jgrapht/jgrapht) - Utilizada para gerar caminhos válidos para a GFC\n- [JUnit 5](https://junit.org/junit5/) - Testes\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhussani%2Fjava-test-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhussani%2Fjava-test-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhussani%2Fjava-test-generator/lists"}