hibernate 用初始数据建立数据库进行测试

qf9go6mv  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(108)

我有一个Spring的 Boot 项目,保存一些实体到数据库和retirve他们,我想使仓库测试用例,所以我使用H2数据库进行测试,但问题是我想初始化数据库之前,每个测试类与一些数据使用它们在测试中。我有一个以上的测试类,每个测试类都应该删除所有的表,并使用Hibernate再次创建它们,并使用初始数据初始化数据库进行测试。
我尝试了2个解决方案1-在测试类上使用@SQL(),它工作了,但它的问题是,对于类中的每个测试,Spring执行SQL语句,这将使数据库增长非常快,并且有很多重复,我不希望我希望SQL语句在运行该类的任何测试方法之前只执行一次。2-将SQL语句设置到测试的propreites文件中,我将工作,但在这种情况下,我应该在一个地方添加用于所有类的所有语句,对于每个类,数据库将充满所有数据,而不仅仅是这个测试类所需的数据。

dojqjjoe

dojqjjoe1#

您似乎希望在每个测试类运行之前使用特定的数据初始化H2数据库,而不是为类中的每个测试方法初始化数据库。您正在寻找一种方法来实现有效的数据初始化并避免跨测试类的数据重复。这里有一个你可以采取的方法:
1.**测试配置:**为您的测试设置专门创建一个配置类。这个类将定义处理数据库设置和初始化的bean。

import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
public class TestConfig {

    @Bean
    public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
        DataSourceInitializer initializer = new DataSourceInitializer();
        initializer.setDataSource(dataSource);
        initializer.setDatabasePopulator(new ResourceDatabasePopulator(new ClassPathResource("data.sql")));
        return initializer;
    }
}

1.**data.sql文件:**在您的src/test/resources目录下创建一个data.sql文件。这个SQL文件应该包含您想要为每个测试类运行的数据初始化脚本。它可以为每个测试类所需的特定测试数据提供所有必要的INSERT语句。
1.**使用测试配置:**在您的每个测试类中,您可以使用@Import注解来包含TestConfig配置类。这将确保在每个测试类运行之前应用配置类中定义的数据初始化。

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringBootTest
@SpringJUnitConfig(TestConfig.class)
@TestPropertySource(locations = "classpath:test.properties")
public class YourTestClass {
    // Your test methods
}

1.**独立测试数据:**如果您想保留每个测试类的测试数据,您可以为每个测试类在其各自的src/test/resources目录中创建单独的data.sql文件。这样,只有必要的数据将被初始化为每个测试类。
通过使用这种方法,您将能够在每个测试类运行之前使用特定数据有效地初始化H2数据库,并且您将不会面临数据重复和数据库中不必要的增长的问题。data.sql文件将只包含与每个测试类相关的数据,使您的测试保持隔离和集中。

相关问题