sql >> Database teknologi >  >> RDS >> Mysql

Hvordan udfylder man databasen kun én gang før @Test-metoder i forårstest?

Med udgangspunkt i Alfredos svar er dette en måde at injicere databaseinformation på uden at kalde den indlejrede databases standardscript. For eksempel kan dette være nyttigt, når du automatisk vil bygge DDL'en for dig - i hvert fald i test.

@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;
    }
}

På denne måde er runOnce() metode kaldes én gang og kun én gang for testkørslen. Hvis du laver isInitialized et instansfelt (ikke-statisk), vil metoden blive kaldt før hver test. På denne måde kan du slippe/genudfylde tabellerne, hvis det er nødvendigt, før hver testkørsel.

Bemærk at dette stadig er en ret hurtig og beskidt løsning og den fornuftige måde at håndtere databasen på er i overensstemmelse med Ralphs svar.



  1. MySQL Error 1170 (42000):BLOB/TEXT-kolonne brugt i nøglespecifikation uden en nøglelængde

  2. Min MySQL-trigger virker ikke, simpel syntaks, ikke kompliceret

  3. Ændres ressource-id hver gang en applikation starter

  4. PI() Eksempler i SQL Server