Entradas

Mostrando las entradas con la etiqueta test

Stub con Jetty embebido en Test con JUnit 5

En esta entrada mostraré un pequeño ejemplo para utilizar al servidor Jetty embebido durante las pruebas (con JUnit 5 ) para cuando necesitemos un Stub de algún servicio fuera de nuestro alcance. 1. Las dependencias: <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>9.4.28.v20200408</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency> 2. La cl...

JPA-Hibernate + POJO + Projection + ConstructorResult + NativeQuery + Testcontainers + PostgreSQL

Imagen
En esta ocasión mostraré un ejemplo usando Java SE 11 de como mapear una clase no entidad (un POJO) a partir de los datos que existen en la base de datos y que representan a una entidad utilizando ConstructorResult, Projection y una construcción "manual" con JPA. Las pruebas serán realizadas usando Testcontainers junto a Postgresql como base de datos. El procedimiento es el siguiente (se omiten los metodos/imports/anotaciones que no son relevantes y usaré lombok solo para getter/setter): 1- La Entidad Representa la entidad que mantendrá datos en la base de datos y de la cual extraeremos algunos de sus campos para nuestro pojo. @Entity @Table(schema = "jpa", name = "persona") public class Persona { @Id private int id; private String nombre; private String apellido; } 2- El POJO Requiere tener un constructor con los argumentos que la query utilizará: public class PersonaPOJO { private String nn; private String a...

Spring Boot con Redis para almacenar JSON y no la serialización predefinida

Imagen
En esta entrada mostraré como utilizar Spring Boot y Redis con el objetivo de almacenar los objetos como JSON y no como la forma de serialización de Java por defecto que tiene RedisTemplate. Los test están con Testcontainers, Junit 5 y AssertJ. Lo primero es la clase que nos convoca, la configuración de RedisTemplate: @Configuration public class RedisConfig { @Autowired private ConfigurableApplicationContext context; @Bean @Primary public RedisTemplate redisTemplate(JedisConnectionFactory conn) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(conn); template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer()); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } @Bean public JedisConnectionFactory redisConnectionFactory(@Value("$...

Usando Redis en Pruebas [versión 2]

Previamente había comentado como utilizar Redis en pruebas mediante redis embebido, pero en esta ocasión utilizaremos Testcontainers , que como lo dicen en su página, podemos utilizar cualquier cosa que corra en docker en nuestros tests 😮. Comencemos Lo primero es incluir en nuestro pom la dependencia a testcontainers: <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <version>1.11.2</version> </dependency> También incluimos otras librerías de test y el cliente redis: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.11.1</version> <scope>test</scope> </depende...

Usando Redis en Pruebas

Redis nos entrega un almacenamiento de estructuras de datos en memoria, claves y valores, geoespacial, ... y muchas otras cosas que lo hacen muy entretenido y útil. En esta entrada mostraré un ejemplo para utilizarlo en pruebas: Comenzamos con la librería que no entregará redis embebido:  <dependency> <groupId>com.github.kstyrc</groupId> <artifactId>embedded-redis</artifactId> <version>0.6</version> <scope>test</scope> </dependency> Luego agregamos el cliente: <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>5.1.5.RELEASE</version> </dependency> Agregamos nuestro test: @Test public void redisFuncionaLocalmenteEnPruebas() { var client = RedisClient.create("redis://localhost:6000"); try (var con...

Variables de Entorno y Sistema en Pruebas

Es común tener que definir variables de ambiente o propiedades del sistema para lanzar una aplicación, por tal motivo ahora muestro un ejemplo que permite utilizar nuestro archivo POM para definir estas variables y usarlas en pruebas: Definir variables de entorno (en linux es export clave1=valor1 ) <environmentVariables> <clave1>valor1</clave1> <clave2>valor2</clave2> <clave3>valor3</clave3> </environmentVariables> Definir propiedades del sistema (de la forma -Dclave2=valor2 ) <systemProperties> <clave4>valor4</clave4> <clave5>valor5</clave5> <clave6>valor6</clave6> </systemProperties> Sección completa:  <project ...> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifa...