gpt4 book ai didi

java - 使用 Spring Boot 在每个 Cucumber 场景之后回滚事务

转载 作者:行者123 更新时间:2023-12-05 03:38:47 24 4
gpt4 key购买 nike

我将 BDD 测试框架 Cucumber 与 Spring Boot 2.5 结合使用。我想在每个 Cucumber 场景之后回滚事务或重置我的数据库。我正在使用 H2 数据库,由动态生成的数据填充。我试过@Transactional,但它不起作用,而且@DirtiesContext 很慢。

最佳答案

执行此操作的方法是使用 PlatformTransactionManager 在每个场景之前启动事务并在之后回滚。当执行带有 @Transactional 注释的 JUnit 测试类时,这基本上就是 TransactionalTestExecutionListener 所做的。

在 Cucumber 中,您可以使用 @Before@After Hook 来执行此操作。因为您可能不想对每个场景都这样做,所以您可以选择使 Hook 有条件,以便它们仅在以正确方式标记场景时执行。

例如:

@txn
Feature: Search

Background:
Given there is a user

Scenario: Find messages by content
Given a User has posted the following messages:
| content |
| I am making dinner |
| I just woke up |
| I am going to work |
When I search for "I am"
Then the results content should be:
| I am making dinner |
| I am going to work |
public class SpringTransactionHooks implements BeanFactoryAware {

private BeanFactory beanFactory;
private TransactionStatus transactionStatus;

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}

@Before(value = "@txn", order = 100)
public void startTransaction() {
transactionStatus = beanFactory.getBean(PlatformTransactionManager.class)
.getTransaction(new DefaultTransactionDefinition());
}

@After(value = "@txn", order = 100)
public void rollBackTransaction() {
beanFactory.getBean(PlatformTransactionManager.class)
.rollback(transactionStatus);
}

}

来自:

https://github.com/cucumber/cucumber-jvm/tree/main/examples/spring-java-junit5

关于java - 使用 Spring Boot 在每个 Cucumber 场景之后回滚事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68859845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com