Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Bloque de código
languagejava
Mockito.doReturn( "asdf" ).when( expedientesService ).getExpediente( nullable( String.class ) );

En el caso de que no queramos devolver nada, que sea un método void, en lugar de usar doReturn(...) utilizaremos doNothing().

Testear métodos @Transactional

Cuando se llama a un método @Transactional, se intentará abrir una conexión con base de datos al llamarlo, por lo que nos dará error directamente aunque hayamos mockeado las operaciones que se hagan dentro de dicho método. Para evitar esto, debemos añadir dos clases de configuración para gestionar las transacciones en los tests. Bajo una carpeta config, añadiremos estas dos clases:

Bloque de código
languagejava
titleNoOpTransactionManager.java
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.support.AbstractPlatformTransactionManager;
import org.springframework.transaction.support.DefaultTransactionStatus;

public class NoOpTransactionManager extends AbstractPlatformTransactionManager {

    @Override
    protected Object doGetTransaction() throws TransactionException {
        return new Object();
    }

    @Override
    protected void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException {
    }

    @Override
    protected void doCommit(DefaultTransactionStatus status) throws TransactionException {
    }

    @Override
    protected void doRollback(DefaultTransactionStatus status) throws TransactionException {
    }
}


Bloque de código
languagejava
titleTestConfig.java
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@TestConfiguration
@EnableTransactionManagement
public class TestConfig {

    @Bean
    public PlatformTransactionManager transactionManager() {
        // Return a mock transaction manager or a do-nothing implementation
        return new NoOpTransactionManager();
    }
}

Por último, en la clase de Test en la que se pruebe el método @Transactional, añadimos la anotación @Import(TestConfig.class):

Bloque de código
languagejava
titleClase del test correspondiente
@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@Import(TestConfig.class)
class TestSolicitudes {
    ...
    ...
    ...
}

Simular peticiones a servicio REST

...