jeudi 15 septembre 2016

How to set specific database management system and/or using real database server in Spring test?

I have a system what generate application automatically. My system generate HTML, Java code, SQL script automatics (!!!). I must test SQL script file (foo.sql).

I have: ApplicationTests.java

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.Sql.ExecutionPhase;
import org.springframework.test.context.jdbc.SqlGroup;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

@SuppressWarnings("deprecation")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@SqlGroup({ @Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:beforeTestRun.sql"),
        @Sql(executionPhase = ExecutionPhase.AFTER_TEST_METHOD, scripts = "classpath:afterTestRun.sql") })
public class ApplicationTests {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    public void contextLoads() throws IOException {
        String query = new String(Files.readAllBytes(Paths.get("E:\\foo.sql")));
        List<Map<String, Object>> resultSet = jdbcTemplate.queryForList(query);
        System.out.println(resultSet);
    }

}

class Application.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

File beforeTestRun.sql is empty, afterTestRun.sql is empty. File query.sql has 1245 line of SQL code (DDL script)

How to set specific database management system and/or using real database server in Spring test? (I use PostgreSQL/Oracle).

Aucun commentaire:

Enregistrer un commentaire