我正在使用黄瓜+黄瓜弹簧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
`
但是无论我做什么,数据仍然保留在测试之间。
任何人都可以阐明或管理工作设置吗?
欢呼
答案 0 :(得分:0)
我终于弄清楚了。我的Cucumber测试通过多种不同的方法(JMS,Rest)进入应用程序,因此该测试不拥有通过这些服务注入的数据的交易范围。
因此,对于每个测试,我都会在before场景钩子中截断db表,这似乎可以正常工作