在春季启动时在H2中加载初始测试数据

时间:2017-11-03 13:04:05

标签: spring-boot

我使用的是Spring Boot 1.5.8。请在内存数据库中使用H2编写测试用例。目前在每个测试用例类中,我们都有@Before注释,我们使用Spring Data类插入数据。

我想知道,我可以在项目中有一个位置,我们可以为所有测试用例定义数据。数据库表由Hybernate使用实体类创建。唯一需要的是在每个测试用例类中从单个位置而不是从@Before插入数据。

我尝试使用包含Insert语句的 data.sql ,但是使用它,Spring不生成模式对象(表),因为我找不到表的错误。我不想为schema.sql

中的每个表指定Create Table语句

应用test.yml

%My signal: y = 0.001*cos(0.005*pi*t+pi/4);


A = 0.001; 
T = 400; 
f = 0.0025; 
pi = 3.14; 

syms m
m=-1:1;
wm=(1/T)*(int((0.001*cos(0.005*pi*t + pi/4))*exp(-j*m*0.005*pi*t),t,0,T));
ww=double(wm);
Amp=abs(ww);
fi=angle(ww);
w=m*2*pi/T;
f=w/(2*pi);

figure('Name','Amplitude spectrum');
stem(f,Amp,'linewidth',2,'color','r'),grid on;
title('Amplitude spectrum'), xlabel('?[rad/s]'), ylabel('|wm|');

schema.sql文件

spring:
  datasource:
    url: jdbc:h2:mem:test;
    driverClassName: org.h2.Driver
    username: sa
    password: 
  jpa:
    database: h2
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create
      naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties: 
      hibernate:
        show_sql: true
        format_sql: false

AbcControllerTest.java

CREATE SCHEMA AB AUTHORIZATION SA;

1 个答案:

答案 0 :(得分:2)

创建用@Component @Profile({ "dev", "test" })注释的新类,然后实现CommandLineRunner,然后注入依赖项

使用CommandLineRunner附带的初始数据覆盖 run()方法

例如

    @Component 
    @Profile({ "dev", "test" })
    setupInitialData implements CommandLineRunner {

    UserService userService;

    //bla bla

    @Override
    @Transactional
    public void run(String... args) {
       User user = new User;
       user.setName("test");
       userService.save(user);

       //bla bla
    }

 }