带有Spring Boot和JPA的Cucumber 4

时间:2018-11-15 14:04:45

标签: spring spring-boot spring-data-jpa cucumber cucumber-jvm

我正在使用黄瓜+黄瓜弹簧4.1来测试SpringBoot 2.1应用程序。在某些情况下,需要在每种情况之间回滚数据库,但是对我而言,无法使其正常工作。

我尝试过:

带有多个注释的基类

`
@Transactional
@RunWith(SpringRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
public abstract class SpringBootBaseIntegrationTest { .. } `

Stepdef类,例如:

`
@ContextConfiguration(classes = {Application.class})
@Ignore
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@Transactional
public class DatabaseSteps extends SpringBootBaseIntegrationTest implements En { ... }
`

第nd个场景的特征用@txn注释,并添加了'cucumber.api.spring'胶水。

我的应用程序具有:

`
@EnableJms
@EnableJpaRepositories
@EnableTransactionManagement
@SpringBootApplication
@PropertySource(ignoreResourceNotFound = false, value = "classpath:application.properties")
class Application implements CommandLineRunner { ... }
`

并且我使用标准的JPA存储库。

我的application.properties是:

`
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=create

spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.show_sql=false
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
#spring.h2.console.enabled=true
`

但是无论我做什么,数据仍然保留在测试之间。

任何人都可以阐明或管理工作设置吗?

欢呼

1 个答案:

答案 0 :(得分:0)

我终于弄清楚了。我的Cucumber测试通过多种不同的方法(JMS,Rest)进入应用程序,因此该测试不拥有通过这些服务注入的数据的交易范围。

因此,对于每个测试,我都会在before场景钩子中截断db表,这似乎可以正常工作