Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie füllt man die Datenbank nur einmal vor @Test-Methoden im Frühjahrstest?

Aufbauend auf Alfredos Antwort ist dies eine Möglichkeit, Datenbankinformationen einzufügen, ohne das Standardskript der eingebetteten Datenbank aufzurufen. Dies kann beispielsweise nützlich sein, wenn Sie die DDL automatisch für Sie erstellen möchten - zumindest 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;
    }
}

Auf diese Weise wird runOnce() Methode wird nur einmal für den Testlauf aufgerufen. Wenn Sie isInitialized machen B. ein Instanzfeld (nicht statisch), wird die Methode vor jedem Test aufgerufen. Auf diese Weise können Sie die Tabellen bei Bedarf vor jedem Testlauf löschen/neu füllen.

Beachten Sie, dass dies immer noch eine ziemlich schnelle Lösung ist und die vernünftige Art und Weise, mit der Datenbank umzugehen, mit Ralphs Antwort übereinstimmt.