sql >> Databasteknik >  >> RDS >> Mysql

Hur fyller man i databasen bara en gång före @Test-metoder i vårtestet?

Bygger på Alfredos svar, detta är ett sätt att injicera databasinformation utan att anropa den inbäddade databasens standardskript. Detta kan till exempel vara användbart när du automatiskt vill bygga DDL åt dig - åtminstone i tester.

@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å detta sätt, runOnce() metoden anropas en gång och endast en gång för testkörningen. Om du gör isInitialized ett instansfält (icke-statiskt), kommer metoden att anropas före varje test. På så sätt kan du släppa/fylla i tabellerna, om det behövs, före varje testkörning.

Observera att detta fortfarande är en ganska snabb och smutsig lösning och det vettiga sättet att hantera databasen är i enlighet med Ralphs svar.



  1. Rails, PostgreSQL och History Triggers

  2. Hur får man data från en annan tabell med hjälp av kolumndata från en annan tabell?

  3. Hur får man de avgränsande koordinaterna för ett amerikanskt postnummer?

  4. MySQL infogar inte ett snedstreck