首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在并行执行中每个场景测试上下文都使用JUnit 5的黄瓜

在并行执行中每个场景测试上下文都使用JUnit 5的黄瓜
EN

Stack Overflow用户
提问于 2022-10-17 14:42:30
回答 1查看 60关注 0票数 0

就在最近,我体验了Cucumber + JUnit 5的并行执行,它工作得很好,我打算从现在开始使用它。之前,由于我还使用了黄瓜- Spring,所以我使用Spring作为带@Component注解的bean来管理单个@Component实例,使用@Before重新设置每个场景。现在有更多的场景并行运行,当然我需要一个线程解决方案。我的解决方案大致如下:

代码语言:javascript
复制
/* Store the Current Scenario in a Thread Local */

private ThreadLocal<Scenario> currentScenario = new ThreadLocal<>();

@Before
public void setup(final Scenario scenario) {
  currentScenario.set(scenario);
}
代码语言:javascript
复制
/* Get Scenario from a Context Map with ScenarioId as the key */

private Map<String, TestContext> contextMap = new HashMap<>();

public TestContext getContext(final Scenario scenario) {
  return contextMap.get(scenario.getId());
}

问题是,我不知道场景是以一个线程开始和结束,还是这个建议的解决方案是安全的。还有其他方法可以访问当前场景的Scenario实例吗?这个问题还有其他解决办法吗?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-17 21:15:43

如果您使用的是Cucumber的最新版本,那么您的步骤定义类默认为场景范围,不应该使用@Component进行注释。

每个场景都会获得步骤定义类的一个新实例。

因此,这是安全的,即使是并行执行:

代码语言:javascript
复制
private Scenario currentScenario;

@Before
public void setup(final Scenario scenario) {
  currentScenario = scenario;
}

如果您有其他没有步骤定义的类,这些类在每个场景中都应该有一个唯一的实例,那么可以将@Component@ScenarioScoped组合起来。

https://github.com/cucumber/cucumber-jvm/tree/main/cucumber-spring#sharing-state-between-steps

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74098979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档