Bonjour,

J'utilise dans mon application Spring, Springliquibase 3.3.2 pour gérer les données de mes tests unitaires. Les données de la base sont lues dans des fichiers csv.

Je voudrais qu'après chaque test unitaire, la base soit recréée, pour ne pas que les changements d'un test me pourrissent un autre test.

Voici comment la base est définie :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@Configuration
@EnableJpaRepositories(basePackages={"my.package"})
@EntityScan(basePackages={"my.package"})
@EnableTransactionManagement
public class DatabaseConfiguration implements EnvironmentAware {
private RelaxedPropertyResolver propertyResolver;
 
private Environment env;
 
private DataSource dataSource;
private SpringLiquibase springLiquibase;
 
@Autowired(required = false)
private MetricRegistry metricRegistry;
 
@Override
public void setEnvironment(Environment env) {
    this.env = env;
    this.propertyResolver = new RelaxedPropertyResolver(env, "spring.datasource.");
}
 
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingClass(name = "fr.ticks.pp.front.config.HerokuDatabaseConfiguration")
@Profile("!" + "cloud")
public DataSource dataSource() {
    log.debug("Configuring Datasource");
    if (propertyResolver.getProperty("url") == null && propertyResolver.getProperty("databaseName") == null) {
        log.error("Your database connection pool configuration is incorrect! The application" +
                "cannot start. Please check your Spring profile, current profiles are: {}",
                Arrays.toString(env.getActiveProfiles()));
 
        throw new ApplicationContextException("Database connection pool is not configured correctly");
    }
    HikariConfig config = new HikariConfig();
    config.setDataSourceClassName(propertyResolver.getProperty("dataSourceClassName"));
    if (propertyResolver.getProperty("url") == null || "".equals(propertyResolver.getProperty("url"))) {
        config.addDataSourceProperty("databaseName", propertyResolver.getProperty("databaseName"));
        config.addDataSourceProperty("serverName", propertyResolver.getProperty("serverName"));
    } else {
        config.addDataSourceProperty("url", propertyResolver.getProperty("url"));
    }
    config.addDataSourceProperty("user", propertyResolver.getProperty("username"));
    config.addDataSourceProperty("password", propertyResolver.getProperty("password"));
 
    if (metricRegistry != null) {
        config.setMetricRegistry(metricRegistry);
    }
 
    dataSource = new HikariDataSource(config);
    return dataSource;
}
 
@Bean
public SpringLiquibase liquibase(DataSource dataSource) {
    SpringLiquibase liquibase = new SpringLiquibase();
    liquibase.setDataSource(dataSource);
    liquibase.setChangeLog("classpath:config/liquibase/master.xml");
    liquibase.setContexts("development, production");
    // ne lance liquibase que si on utilise H2 en mémoire
    boolean runningH2 = isRunningH2();
    liquibase.setShouldRun(runningH2);
    if (runningH2) {
        log.debug("Configuring Liquibase for H2");
    }
 
    return liquibase;
}
Comment puis-je demander à recréer la base dans mes fichiers de test?
Code d'un fichier de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
public abstract class AbstractPPTest
{
 
  @Autowired
  protected ApplicationContext applicationContext;
 
  protected MockWebServiceClient mockClient;
 
  @Before
  public void initMock()
  {
    assertNotNull(applicationContext);
    mockClient = MockWebServiceClient.createClient(applicationContext);
    testDate = Calendar.getInstance();
  }
 
@Test
public void test
{
...
}
Merci!