iGRPIGRP 3.0Documentation

Testing

Aprenda a testar projetos Spring Boot no IGRP Studio com testes unitários, de integração e funcionais para modelos, operações CRUD, relacionamentos e controladores.

O processo de Execução e Pré-visualização seguem um fluxo definido, garantindo a correta geração de componentes essenciais antes do arranque da aplicação.

Objetivo

Garantir que o sistema funciona corretamente em várias circunstâncias e cumpre os requisitos estabelecidos através de testes automatizados que verificam a criação de APIs, modelos, controladores e funcionalidades CRUD.

Tipos de Teste
  • Testes de criação de modelos
  • Testes de operações CRUD
  • Testes de relacionamentos
  • Testes de controladores
Benefícios
  • Garantia de qualidade
  • Detecção precoce de erros
  • Documentação viva
  • Refatoração segura

Princípios de Teste

Testes Unitários

Testam componentes isolados

Exemplos: Services Repositories Entities DTOs

Testes de Integração

Testam interação entre componentes

Exemplos: Controllers Database External APIs Full flow

Testes Funcionais

Testam funcionalidades completas

Exemplos: CRUD operations Business rules Validations Workflows


Tipos de Testes Implementados

Tipo 1Testes de Modelo

Verificar criação correta de modelos a partir de configurações

Cenários Testados: Geração de modelo · Mapeamento JPA · Validação de atributos · Configurações de tabela

Tipo 2Testes CRUD

Garantir funcionamento das operações CRUD automáticas

Cenários Testados: Create operations · Read operations · Update operations · Delete operations

Tipo 3Testes de Relacionamentos

Validar relacionamentos entre modelos existentes

Cenários Testados: OneToOne · OneToMany · ManyToOne · ManyToMany

Tipo 4Testes de Controladores

Verificar geração e funcionamento dos controladores

Cenários Testados: Endpoint generation · Service interface · Configuration files · Response validation


Cenários de Teste Detalhados

Criar um Novo Modelo

Processo de Teste

Fornecido um ficheiro de configuração de modelo (ModelConfig)
A função de geração de modelos é executada
É validado que o ficheiro do modelo é corretamente gerado

Resultado Esperado

O modelo é criado com sucesso na API, e todos os atributos especificados são refletidos no ficheiro gerado.

Adicionar Operações CRUD

Processo de Teste

É utilizado um modelo previamente gerado como base
A funcionalidade para adicionar operações CRUD é executada
É validado que o repositório inclui os métodos CRUD solicitados

Resultado Esperado

Um repositório que estende CrudRepository é criado, contendo todos os métodos CRUD necessários.

Adicionar Relações Entre Modelos

Processo de Teste

São criados vários modelos que representam diferentes entidades
A configuração é atualizada para incluir relações
O modelo é gerado novamente com as relações incluídas

Resultado Esperado

As relações entre modelos são configuradas e refletidas apropriadamente no código gerado.

Testes de Controladores

Verificam se os controladores estão gerando os endpoints corretamente e se as respostas estão de acordo como esperado.

Criação de Controlador

Objetivo: Testar que o controlador é gerado corretamente a partir do contexto fornecido e que o ficheiro resultante é guardado no local esperado.

Interface de Serviço

Objetivo: Verificar que a interface de serviço é criada corretamente com os métodos declarados e é guardada no diretório especificado.

Ficheiro de Configuração

Objetivo: Garantir que o ficheiro de configuração do controlador é guardado no diretório .studio/controllers, validando que a configuração está correta.


Estrutura de Testes

Organização dos Testes

ModelGenerationTest.java
EntityValidationTest.java
RepositoryTest.java
ControllerGenerationTest.java
EndpointTest.java
ResponseValidationTest.java
CrudOperationsTest.java
BusinessLogicTest.java
IntegrationTest.java
OneToOneTest.java
OneToManyTest.java
ManyToOneTest.java
ManyToManyTest.java

Ferramentas e Frameworks de Teste

JUnit 5
Framework principal para testes unitários
Mockito
Framework para criação de mocks
Spring Boot Test
Testes de integração Spring
TestContainers
Testes com banco de dados real
AssertJ
Biblioteca de assertions fluentes
WireMock
Mock de serviços externos

Exemplo de Teste Unitário

Teste de Criação de Modelo

@ExtendWith(MockitoExtension.class)
class ModelGenerationTest {
  @Mock
  private ModelConfigRepository configRepository;
  @InjectMocks
  private ModelGenerationService generationService;
  @Test
  void deveGerarModeloComSucesso() {
    // Arrange
    ModelConfig config = new ModelConfig("Pessoa");
    when(configRepository.save(any())).thenReturn(config);
    // Act
    Model result = generationService.generateModel(config);
    // Assert
    assertThat(result.getName()).isEqualTo("Pessoa");
    verify(configRepository).save(config);
  }
}

Boas Práticas de Teste

  • AAA Pattern: Organize testes com Arrange, Act, Assert
  • Nomes Descritivos: Use nomes que descrevam o comportamento testado
  • Testes Independentes: Cada teste deve ser independente dos outros
  • Cobertura: Mantenha uma boa cobertura de código (>80%)
  • Testes Rápidos: Testes unitários devem ser rápidos de executar
  • Dados de Teste: Use dados realistas mas não sensíveis

Execução dos Testes

# Executar todos os testes
mvn test
# Executar com relatório de cobertura
mvn test jacoco:report
# Executar testes específicos
mvn test -Dtest=ModelGenerationTest
How is this guide?

Última atualização: