Testes - ecosif-masterdata

Este documento descreve como escrever e executar testes no ecosif-masterdata.

Estrutura de Testes

Localização

Os testes devem estar em src/test/java no mesmo pacote que o código testado.

Tipos de Testes

1. Testes Unitários

Testam classes isoladamente, usando mocks para dependências.

Exemplo: Teste de Service

@ExtendWith(MockitoExtension.class)
class CompanyServiceImplTest {

    @Mock
    private CompanyRepository companyRepository;

    @InjectMocks
    private CompanyServiceImpl companyService;

    @Test
    void should_ReturnCompany_When_IdExists() {
        // Given
        Long id = 1L;
        Company expectedCompany = new Company();
        expectedCompany.setId(id);

        when(companyRepository.findById(id))
            .thenReturn(Optional.of(expectedCompany));

        // When
        Company result = companyService.findById(id);

        // Then
        assertThat(result).isNotNull();
        assertThat(result.getId()).isEqualTo(id);
    }
}

2. Testes de Integração

Testam a interação entre múltiplos componentes.

Exemplo: Teste de Controller

@SpringBootTest
@AutoConfigureMockMvc
class CompanyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void should_CreateCompany_When_ValidData() throws Exception {
        CompanyDTO dto = new CompanyDTO();
        dto.setName("Test Company");
        dto.setCnpj("12345678000190");

        mockMvc.perform(post("/company")
                .contentType(MediaType.APPLICATION_JSON)
                .content(asJsonString(dto))
                .header("Authorization", "Bearer " + validToken))
            .andExpect(status().isCreated());
    }
}

Executando Testes

# Todos os testes
mvn test

# Teste específico
mvn test -Dtest=CompanyControllerTest

# Com cobertura
mvn test jacoco:report

Recursos