java—有没有一种方法可以读取datatable和在Cumber中使用eventpublisher的场景示例

00jrzges  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(275)

我需要解析我正在使用的事件发布器的cucumber特性。但是,我无法读取一个步骤的数据表,也无法读取场景附带的示例。

public class DryRunPlugin implements EventListener {
@Override
public void setEventPublisher(EventPublisher publisher) {
    publisher.registerHandlerFor(TestCaseStarted.class, this::handleCaseStarted);
}

private void handleCaseStarted(TestCaseStarted event) {

    Iterator steps = event.getTestCase().getTestSteps().iterator();
    while(steps.hasNext())
    {
        Object stp = steps.next();
        if(stp instanceof PickleStepTestStep)
        {
            PickleStepTestStep p = (PickleStepTestStep) stp;
            String keyword = p.getStep().getKeyWord().toString();
            String stepText = p.getStep().getText();
            System.out.println(keyword + stepText);

            Object dataTable = p.getStep().getArgument();
            System.out.println(dataTable.getClass());
            if(dataTable !=null)
            {
                //GherkinVintageDataTableArgument arg = (GherkinVintageDataTableArgument)dataTable;
                //Object Rows = (dataTable.cells();
            }

        }

    }
}

}
当我试图使用gherkinventagedatatableargument时,它给了我一个错误,因此无法访问datatable进行打印。我用的是 cucumber 5.5版
错误:io.cumber.core.gherkin.vintage.gherkinIntageDataTableArgument在io.cumber.core.gherkin.vintage中不是公共的。无法从包外部访问

wfauudbj

wfauudbj1#

签字人 Step.getArgument() 显示:

@API(status = API.Status.STABLE)
public interface Step {

    /**
     * Returns this Gherkin step argument. Can be either a data table or doc
     * string.
     *
     * @return a step argument, null if absent
     */
    StepArgument getArgument();

然后看着 StepArgument 您将看到一个空接口和两个子接口, DataTableArgument 以及 DocStringArgument .

@API(status = API.Status.STABLE)
public interface StepArgument {

}

您需要使用:

package io.cucumber.plugin.event;

import org.apiguardian.api.API;

import java.util.List;

/**
 * Represents a Gherkin data table argument.
 */
@API(status = API.Status.STABLE)
public interface DataTableArgument extends StepArgument {

    List<List<String>> cells();

    int getLine();

}

您可能还看到了接口的几个具体实现,例如 GherkinVintageDataTableArgument 但是你不能访问这些,因为它们是包私有的。
这是故意的。
插件应该只需要使用 cucumber-plugin 模块。这可以确保您不依赖cucumber的内部实现细节,并且您的插件在升级时很可能工作。所以试着用 io.cucumber.plugin.event.DataTableArgument 相反。
我需要解析我正在使用的事件发布器的cucumber特性。
取决于你真正想要达到的目标,cucumber提供的忠诚可能还不够。考虑在 TestSourceRead 事件。

相关问题