Prueba Unitaria de R2dbcEntityTemplate: Validando la Persistencia y Recuperación de Datos
Test unitarios r2dbcentitytemplate spring boot, reactivo
R2dbcEntityTemplate
es un componente central de Spring Data R2DBC que simplifica el acceso a la base de datos y la manipulación de datos al proporcionar una API reactiva de alto nivel para interactuar con una base de datos relacional. Sigue el patrón de plantilla (template pattern), donde maneja las operaciones comunes de la base de datos, como la inserción, actualización, eliminación y consulta de datos, lo que te permite centrarte en la lógica de negocio de tu aplicación.
Para testear una clase que implemente R2dbcEntityTemplate
lo vamos hacer con junit .
Ejemplo:
Clase java TestAdapter
@Repository
@RequiredArgsConstructor
public class TestAdapter implements TestService {
private final R2dbcEntityTemplate template;
@Override
public Mono<Void> delete(Test test) {
return template.delete(TestData.class)
.matching(
Query.query(Criteria.where("id").is(test.getId())
.and(STATE).is(test.getState())
.and(CONSECUTIVE).is(test.getConsecutive())
)
)
.all().then();
}
@Override
public Mono<Void> update(Test test) {
return template.update(TestData.class)
.matching(
Query.query(Criteria.where(ID).is(test.getT1())))
.apply(Update.update(CONSECUTIVE, test.getT2())
)
.then();
}
}
Clase java TestAdapterTest
moqueamos R2dbcEntityTemplate
private final R2dbcEntityTemplate template
= Mockito.mock(R2dbcEntityTemplate.class, RETURNS_DEEP_STUBS);
// example test
@Test
void delete(){
Mockito.when(template.delete(TestData.class)
.matching(any(Query.class)).all())
.thenReturn(Mono.empty());
TestAdapter.delete(test)
.as(StepVerifier::create)
.verifyComplete();
}
update
private final R2dbcEntityTemplate template
= Mockito.mock(R2dbcEntityTemplate.class, RETURNS_DEEP_STUBS);
// example test update
@Test
void update(){
Mockito.when(template.update(TestData.class)
.matching(any(Query.class)).apply(any()))
.thenReturn(Mono.empty());
TestAdapter.update(tets)
.as(StepVerifier::create)
.verifyComplete();
}
happy code :).