gpt4 book ai didi

cucumber-jvm - 如何创建一个 Cucumber-java 自定义格式化程序来获取 Cucumber 标签

转载 作者:行者123 更新时间:2023-12-04 05:26:41 25 4
gpt4 key购买 nike

我有一个 cucumber 项目,我想获得项目中的所有标签,以便能够选择它们作为参数。

我找到了这个 question cucumber 可以选择获取标签,但我发现它不再起作用,然后我发现了另一个 question我发现我需要一个自定义格式化程序来获取我的标签,但它用于 ruby​​,而我需要它用于 Java,所以我找到了这个 article关于如何创建自定义格式化程序,但我发现这适用于 cukes 版本,我正在使用 io 版本。

所以我在cucumber包中搜索并从cucumber.runtime.formatter包中的JSONFormatter的副本创建了一个自定义格式化程序,这是我的代码:

import cucumber.api.TestCase;
import cucumber.api.event.*;
import cucumber.api.formatter.Formatter;
import cucumber.api.formatter.NiceAppendable;
import gherkin.deps.com.google.gson.Gson;
import gherkin.deps.com.google.gson.GsonBuilder;
import gherkin.pickles.PickleTag;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class TagsFormatter implements Formatter {

private String currentFeatureFile;
private final Gson gson = new GsonBuilder().setPrettyPrinting().create();
private final NiceAppendable out;

private List<String> tags = new ArrayList<>();


private EventHandler<TestCaseStarted> caseStartedHandler = this::handleTestCaseStarted;

private EventHandler<TestRunFinished> runFinishedHandler = event -> finishReport();

public TagsFormatter(Appendable out) {
this.out = new NiceAppendable(out);
}

@Override
public void setEventPublisher(EventPublisher publisher) {
publisher.registerHandlerFor(TestCaseStarted.class, caseStartedHandler);
publisher.registerHandlerFor(TestRunFinished.class, runFinishedHandler);
}

private void handleTestCaseStarted(TestCaseStarted event) {
if (currentFeatureFile == null || !currentFeatureFile.equals(event.testCase.getUri())) {
currentFeatureFile = event.testCase.getUri();
collectTags(event.testCase);
}
}

private void finishReport() {
out.append(gson.toJson(tags));
out.close();
}

private void collectTags(TestCase testCase) {
testCase.getTags();
tags.addAll(testCase.getTags()
.stream()
.map(PickleTag::getName)
.collect(Collectors.toList()));
}
}

我复制了我需要在我的项目中的 lib 文件夹中运行 cucumber 的库,并尝试使用我的格式化程序运行它,如下所示:
java -cp .\lib\cucumber-core-2.4.0.jar;.\lib\gherkin-5.0.0.jar;.\lib\cucumber-java-2.4.0.jar;.\lib\cucumber-jvm-deps-1.0.6.jar cucumber.api.cli.Main -p "com.myproject.formatters.TagsFormatter:tags.txt"

但我得到一个类未找到异常:
λ java -cp .\lib\cucumber-core-2.4.0.jar;.\lib\gherkin-5.0.0.jar;.\lib\cucumber-java-2.4.0.jar;.\lib\cucumber-jvm-deps-1.0.6.jar cucumber.api.cli.Main -p "com.myproject.formatters.TagsFormatter:tags.txt"
Exception in thread "main" cucumber.runtime.CucumberException: Couldn't load plugin class: com.myproject.formatters.TagsFormatter
at cucumber.runtime.formatter.PluginFactory.loadClass(PluginFactory.java:181)
at cucumber.runtime.formatter.PluginFactory.pluginClass(PluginFactory.java:166)
at cucumber.runtime.formatter.PluginFactory.getPluginClass(PluginFactory.java:223)
at cucumber.runtime.formatter.PluginFactory.isFormatterName(PluginFactory.java:201)
at cucumber.runtime.RuntimeOptions$ParsedPluginData.addPluginName(RuntimeOptions.java:471)
at cucumber.runtime.RuntimeOptions.parse(RuntimeOptions.java:157)
at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:115)
at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:108)
at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:100)
at cucumber.api.cli.Main.run(Main.java:31)
at cucumber.api.cli.Main.main(Main.java:18)
Caused by: java.lang.ClassNotFoundException: com.myproject.formatters.TagsFormatter
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at cucumber.runtime.formatter.PluginFactory.loadClass(PluginFactory.java:174)
... 10 more

那么,如何以一种可识别的方式创建此格式化程序?或者至少从控制台获取 cucumber 的标签列表?

谢谢

最佳答案

仅通过观察您的代码,我认为它没有任何问题。但是,您的命令似乎没有包含 TagsFormatter 的编译版本。在类路径上。

如果您的编译源位于 .\bin\确保包含该文件夹,即:

java -cp .\lib\cucumber-core-2.4.0.jar;.\lib\gherkin-5.0.0.jar;.\lib\cucumber-java-2.4.0.jar;.\lib\cucumber-jvm-deps-1.0.6.jar;.\bin\* cucumber.api.cli.Main -p "com.myproject.formatters.TagsFormatter:tags.txt"

关于cucumber-jvm - 如何创建一个 Cucumber-java 自定义格式化程序来获取 Cucumber 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004702/

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