La mia applicazione Primavera-Boot-MVC-Web ha la seguente configurazione del database in application.properties
di file:Come ricreare il database prima di ogni test in primavera?
spring.datasource.url=jdbc:h2:tcp://localhost/~/pdk
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
questa è l'unica configurazione che ho fatto. Nessuna altra configurazione fatta da me da nessuna parte. Tuttavia, Spring e i sottosistemi ricreano automaticamente il database su ogni esecuzione di un'applicazione Web. Il database viene ricreato cioè sul sistema eseguito mentre contiene i dati dopo l'applicazione.
Non stavo capendo questo default e mi aspettavo che questo è adatto per i test.
Ma quando ho iniziato a eseguire i test ho trovato che il database viene ricreato solo una volta. Dato che i test vengono eseguiti senza un ordine predefinito, questo non ha assolutamente senso.
Quindi, la domanda è: come avere senso? Cioè come far ricreare il database prima di ogni test come accade all'avvio dell'applicazione per la prima volta?
Il mio test di intestazione di classe è seguente:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = myapp.class)
//@WebAppConfiguration
@WebIntegrationTest
@DirtiesContext
public class WebControllersTest {
Come vedete, ho provato @DirtiesContext
a livello di classe e non ha aiutato.
UPDATE
Ho un fagiolo
@Service
public class DatabaseService implements InitializingBean {
che ha un metodo
@Override
@Transactional()
public void afterPropertiesSet() throws Exception {
log.info("Bootstrapping data...");
User user = createRootUser();
if(populateDemo) {
populateDemos();
}
log.info("...Bootstrapping completed");
}
Adesso ho fatto è populateDemos()
metodo per cancellare tutti i dati dal database. Sfortunatamente, non ha chiamato prima di ogni test nonostante @DirtiesContext
. Perché?
Questa è una logica personalizzata. Spring non sa nulla dei tuoi database. Scrivi un '@ Before' e' @ After' per configurare e pulire. –
@SotiriosDelimanolis So che è breve, ma il tuo commento non dovrebbe essere una risposta? –
@JimGarrison Eh, wiki della comunità. –