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 :).