sql >> Database >  >> RDS >> Mysql

Hoe de database slechts één keer te vullen vóór @Test-methoden in de lentetest?

Voortbouwend op het antwoord van Alfredos, is dit een manier om database-informatie te injecteren zonder het standaardscript van de ingesloten database aan te roepen. Dit kan bijvoorbeeld handig zijn als u de DDL automatisch voor u wilt bouwen - in ieder geval in tests.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContext.xml"})
public class TestClass {

    @Autowired
    private ApplicationContext ctx;

    private JdbcTemplate template;

    @Autowired
    public void setDataSource(DataSource dataSource) {
       template = new JdbcTemplate(dataSource);
    }

    private static boolean isInitialized = false;

    @Before
    public void runOnce() {
        if (isInitialized) return;
        System.out.println("Initializing database");

        String script = "classpath:script.sql"; 
        Resource resource = ctx.getResource(script);
        JdbcTestUtils.executeSqlScript(template, resource, true);            
        isInitialized = true;
    }
}

Op deze manier wordt de runOnce() methode wordt één keer en slechts één keer aangeroepen voor de testrun. Als u isInitialized . maakt een instantieveld (niet-statisch), wordt de methode voor elke test aangeroepen. Op deze manier kunt u, indien nodig, de tabellen laten vallen/opnieuw vullen voor elke testrun.

Merk op dat dit nog steeds een nogal snelle en vuile oplossing is en dat de verstandige manier om met de database om te gaan in overeenstemming is met het antwoord van Ralph.



  1. Door MySQL opgestelde instructies met een variabelenlijst met variabele grootte

  2. Mysql-gebeurtenisfout bij gebruik van php

  3. Een back-up maken van of een nieuwe tabel maken van een bestaande SQL Server-tabel in SQL Server - SQL Server / TSQL-zelfstudie, deel 105

  4. Hoe MySQL max_user_connections-fout op te lossen