sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo llenar la base de datos solo una vez antes de los métodos @Test en la prueba de primavera?

Sobre la base de la respuesta de Alfredo, esta es una forma de inyectar información de la base de datos sin llamar al script predeterminado de la base de datos integrada. Por ejemplo, esto puede ser útil cuando desea crear automáticamente el DDL para usted, al menos en las pruebas.

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

De esta forma, el runOnce() El método se llama una vez y solo una vez para la ejecución de la prueba. Si haces isInitialized un campo de instancia (no estático), el método se llamará antes de cada prueba. De esta manera, puede descartar/rellenar las tablas, si es necesario, antes de cada ejecución de prueba.

Tenga en cuenta que esta sigue siendo una solución bastante rápida y sucia y la forma sensata de manejar la base de datos está de acuerdo con la respuesta de Ralph.