H2 db用于SpringBoot测试

时间:2017-08-28 09:53:37

标签: java spring testing spring-boot h2

我正在使用Postgres数据库,我想使用H2数据库进行测试。问题是当我在数据库中创建新对象时,似乎在测试中根本没有使用H2。

测试类:

 @RunWith(SpringJUnit4ClassRunner.class)
 @SpringBootTest
 @AutoConfigureMockMvc
 @WithMockUser(roles = "ADMIN")
 @ActiveProfiles("test")
 public class CompanyTests {

@SpyBean
private CompanyService companyServiceMock;

@Autowired
private MockMvc mockMvc;

@Autowired
EntityManager entityManager;

@Test
@Transactional
public void testaaaa() {
    entityManager.persist(new Company("nnnn", new Address()));
    List<Company> all = companyServiceMock.findAll();
    all.forEach(company -> System.out.println(company.getName()));
}

application.properties:

 spring.datasource.driverClassName=org.postgresql.Driver
 spring.datasource.url=jdbc:postgresql://localhost:5432/EDI
 spring.datasource.username=postgres
 spring.datasource.password=password
 spring.datasource.platform=postgresql
 spring.datasource.initialize=true
 spring.datasource.continue-on-error=true
 spring.jackson.serialization.fail-on-empty-beans=false

 spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
 spring.jpa.generate-ddl=true
 spring.jpa.show-sql=true
 spring.jpa.hibernate.ddl-auto=create

application-test.properties:

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-        
1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true

当我在测试中使用findAll()时,它会列出postgresql中的所有公司以及由entityManager创建的新公司。

2 个答案:

答案 0 :(得分:0)

您应该拥有devtest个人资料的单独属性文件,在您的情况下,您应该将application.properties重命名为application-dev.properties并创建application.properties个文件。只有一个属性spring.profiles.active=dev

答案 1 :(得分:0)

如何将@TestPropertySource(locations= "classpath:application-test.properties")添加到注释中?您应该对使用测试 application.properties 的测试类进行明确说明。

这很晚了,但是我很乐意为您提供帮助。