O que unit-test-mapper-converter faz?
Fornece padrões para testes unitários de mapeadores, conversores e mapeamentos de beans. Valida a lógica de transformação de entidade para DTO e de modelos de forma isolada. Gera testes de mapeamento executáveis com MapStruct e cobertura para conversores personalizados. Use ao escrever testes de mapeamento, testes de conversores, testes de mapeamento de entidades ou ao garantir a correta transformação de dados entre DTOs e objetos de domínio.
Funcionalidades
- Geração automática de testes unitários para mapeadores MapStruct
- Cobertura para conversores personalizados
- Validação de mapeamento de entidades para DTOs
- Isolamento da lógica de transformação de dados
- Suporte para JUnit e Mockito
Como usar
- Certifique-se de ter as dependências do MapStruct configuradas no seu projeto
- Execute o comando para gerar os testes de mapeamento
- Verifique os testes gerados e ajuste conforme necessário
Exemplo de comando
./generate-mapper-tests.sh
Ou, se usando a interface do agente:
Gere testes de mapeamento para o mapeador UserMapper
Exemplo de teste gerado
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import static org.junit.jupiter.api.Assertions.*;
public class UserMapperTest {
private UserMapper userMapper = Mappers.getMapper(UserMapper.class);
@Test
void testEntityToDto() {
UserEntity entity = new UserEntity();
entity.setId(1L);
entity.setName("João");
entity.setEmail("[email protected]");
UserDto dto = userMapper.entityToDto(entity);
assertNotNull(dto);
assertEquals(entity.getId(), dto.getId());
assertEquals(entity.getName(), dto.getName());
assertEquals(entity.getEmail(), dto.getEmail());
}
@Test
void testDtoToEntity() {
UserDto dto = new UserDto();
dto.setId(1L);
dto.setName("Maria");
dto.setEmail("[email protected]");
UserEntity entity = userMapper.dtoToEntity(dto);
assertNotNull(entity);
assertEquals(dto.getId(), entity.getId());
assertEquals(dto.getName(), entity.getName());
assertEquals(dto.getEmail(), entity.getEmail());
}
@Test
void testNullSource() {
assertNull(userMapper.entityToDto(null));
assertNull(userMapper.dtoToEntity(null));
}
@Test
void testPartialMapping() {
UserEntity entity = new UserEntity();
entity.setId(1L);
// name e email não definidos
UserDto dto = userMapper.entityToDto(entity);
assertNotNull(dto);
assertEquals(1L, dto.getId());
assertNull(dto.getName());
assertNull(dto.getEmail());
}
}
Conversores personalizados
Para conversores personalizados, a skill pode gerar testes que verificam a lógica de conversão específica:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CustomDateConverterTest {
private final DateConverter converter = new DateConverter();
@Test
void testStringToLocalDate() {
assertEquals(LocalDate.of(2023, 1, 15), converter.toLocalDate("2023-01-15"));
}
@Test
void testInvalidFormat() {
assertThrows(DateTimeParseException.class, () -> converter.toLocalDate("invalid-date"));
}
@Test
void testNullInput() {
assertNull(converter.toLocalDate(null));
}
}
Boas práticas
- Sempre teste mapeamentos nulos e valores limites
- Use o isolamento para evitar dependências de banco de dados
- Mantenha os testes atuais conforme os mapeamentos evoluem
- Considere usar ferramentas de cobertura de código para garantir que todos os mapeamentos sejam testados
Suporte a plataformas
- Java 8+
- MapStruct 1.4+
- JUnit 5
- Mockito 3+
- Spring Framework (opcional)