Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Erro de DataSource

Estou precisando de ajuda em um projeto,

A estrutura do projeto é assim: Estou testando o Repository, O banco de dados que estou usando é sql server e é um procedure.

Após eu criar esse código para teste : @Test void testListarPorCpfCnpj() {

    List<Pessoa> expectativa = new ArrayList();

    when(jdbcTemplateMock.query(anyString(), any(RowMapper.class), anyString()))
            .thenReturn(Collections.singletonList(expectativa));
    String cpf = "00100200";
    List<Pessoa> atual = apoliceRepository.listarPorCpfCnpj(cpf);

    assertEquals(expectativa, atual);
} } 


ai ele da esse erro: 
java.lang.IllegalStateException: No DataSource set
at org.springframework.util.Assert.state(Assert.java:76)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.compileInternal(AbstractJdbcCall.java:314)

e no repository a parte que  não é validada é essa:

pessoa dto = new pessoa();
        dto.setCdIdade(rs.getInt("cdIdade"));
        dto.setCdNome(rs.getString("cdNome"));
        dto.setMeses(rs.getLong("Meses"));
        dto.setNumerors.getInt("numero"));
        dto.setCdRamo(rs.getInt("cdRamo"));
        dto.setNomeProduto(rs.getString("nmProduto"));
        dto.setNomeRua(rs.getString("nmRua"));
        dto.setDescricaoSituacao(rs.getString("descricaoSituacao"));
        dto.setValor(rs.getBigDecimal("valor"));
        dto.setTipoProduto(rs.getString("tipoProduto"));
        return dto;

e essa parte tbm :

Map<String, Object> simpleJdbcCallResult = simpleJdbcCall.execute(in);

    return (List<Pessoa>) simpleJdbcCallResult.get("retorno");
}



Sei que não tem muito a ver com a aula, porem com a sua experiência espero que consiga me ajudar a solucionar esse erro,

Pesquisei na internet e vi que talvez eu tenha que configurar o DataSource, porem tbm não achei solução, 

Ah, e a intenção principal seria não precisar usar um outro banco de dados, como o H2, para realizar os testes 

Agradeço desde já!!
4 respostas

Olá, Izabela!

Esse erro ocorre porque o DataSource não foi configurado corretamente para o teste.

Uma possível solução é configurar o DataSource no seu ambiente de teste. Você pode fazer isso utilizando um arquivo de configuração específico para os testes ou utilizando anotações do Spring, caso esteja utilizando esse framework.

Aqui está um exemplo de como configurar o DataSource utilizando anotações do Spring:

@Configuration
public class TestConfig {

    @Bean
    public DataSource dataSource() {
        // Configuração do DataSource para o SQL Server
        // Certifique-se de fornecer as informações corretas de conexão com o banco de dados
        DataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        dataSource.setUrl("jdbc:sqlserver://localhost:1433;databaseName=seu_banco_de_dados");
        dataSource.setUsername("seu_usuario");
        dataSource.setPassword("sua_senha");
        
        return dataSource;
    }
}

Depois de configurar o DataSource, você precisa garantir que ele seja utilizado nos testes. Uma maneira de fazer isso é utilizando a anotação @ContextConfiguration nos seus testes:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestConfig.class)
public class SeuTeste {

    // Seus testes aqui
}

Dessa forma, o Spring Framework irá utilizar o DataSource configurado no seu ambiente de teste.

Espero que essa solução te ajude a resolver o erro de DataSource!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Ultilizando os dois imports que aparece para mim, ele fica dando esses errinhos no código, estou usando o import certo ?

solução!

Troca para devolver direto a implementação:

@Bean
public DriverManagerDataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    dataSource.setUrl("jdbc:sqlserver://localhost:1433;databaseName=seu_banco_de_dados");
    dataSource.setUsername("seu_usuario");
    dataSource.setPassword("sua_senha");

    return dataSource;
}

Muito obrigada Rodrigo, ajudou demais!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software