我正在使用Spring Boot 1.5.8.Release,并使用H2内存数据库编写测试用例。目前,在每个测试用例类中,我们都有@Before注释,在其中使用Spring Data类插入数据。
我想知道,我是否可以在项目中的单个位置定义我们所有测试用例的数据。数据库表由Hybernate使用实体类创建。唯一需要的是从单个位置插入数据,而不是从每个测试用例类的@Before中插入数据。
我尝试使用包含Insert语句的data.sql,但是使用它时,Spring不会生成模式对象(表),因此我会收到表未找到错误。我不想为schema.sql中的每个表指定Create Table语句。
application-test.yml
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
Schema.sql
CREATE SCHEMA AB AUTHORIZATION SA;
AbcControllerTest.java
@RunWith(SpringRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
@SpringBootTest(classes = WebApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
@ActiveProfiles("test")
public class AbcControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private LeDataService leDataService;
@Before
public void setup() {
MyInfo myInfo = new MyInfo();
..............
..............
leDataService.save(myInfo);
}
@Test
public void getAbcTest() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/Abcs/1234567/12345678")
.with(SecurityMockMvcRequestPostProcessors.user("test").password("test123"))
.with(SecurityMockMvcRequestPostProcessors.csrf()))
.andExpect(status().isOk())
}
}