有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用数据库测试spring boot api的java

我想自动测试我的spring api。现在我有大约7-8个有趣的情况,并提出:

  1. 在postgres 7数据库中部署(测试1、2等)
  2. 申请。属性写入db test1
  3. 运行测试并转到2

这很难。什么是简单的方法

  1. 我想有一个测试数据库(明确的数据库,只有表结构)
  2. 在测试前写入db fixture(包含数据的特殊文件,例如用户、报告和其他)
  3. 运行测试
  4. 测试后,删除夹具,并再次清除数据库

我能在春天前完成吗?早期我使用python/django编程,并使用类似的方式


共 (1) 个答案

  1. # 1 楼答案

    我认为解决这个问题的一种方法是通过自定义属性文件和@Configuration类

    您将为每个测试创建属性文件,例如test1 dbA。属性

    jdbc.driverClassName=org.h2.Driver
    jdbc.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
    jdbc.username=db1
    jdbc.password=..
    

    接下来,您将定义从test1dba加载属性的数据源bean。属性

    @Configuration
    @EnableJpaRepositories(basePackages = "org.baeldung.repository")
    @PropertySource("test1-dbA.properties")
    @EnableTransactionManagement
    public class DB1Config {
            @Autowired
        private Environment env;
    
        @Bean
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
            dataSource.setUrl(env.getProperty("jdbc.url"));
            dataSource.setUsername(env.getProperty("jdbc.user"));
            dataSource.setPassword(env.getProperty("jdbc.pass"));
    
            return dataSource;
        }
    // ...
    }
    

    在JUnit测试中,您将加载配置类:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {Application.class, DB1Config.class})
    public class db1Test{
        // ...
    }
    

    这个选项和其他选项可以在这里找到:https://www.baeldung.com/spring-testing-separate-data-sourcehttps://www.baeldung.com/spring-jpa-test-in-memory-database