当前位置: 首页 > 知识库问答 >
问题:

JBehave不识别步骤,但加载步骤文件

徐卓
2023-03-14

使用一个不同的测试运行器(基于注释的测试运行器),这些步骤将被拾取并运行。不过,基于注释的方法似乎不支持步骤工厂,所以我交换了模型。现在,它将加载steps类(在调用构造函数时会发生一些可见的事情),但它不会识别其中的任何步骤。有什么想法吗?下面是我的嵌入器类:

private final CrossReference xref = new CrossReference();

public LoginAcceptanceFull() {
    configuredEmbedder().embedderControls().doGenerateViewAfterStories(true)
    .doIgnoreFailureInStories(true).doIgnoreFailureInView(true).useThreads(2)
    .useStoryTimeoutInSecs(60);
}

@Override
public Configuration configuration() {
    Class<? extends Embeddable> embeddableClass = this.getClass();
    Properties viewResources = new Properties();
    viewResources.put("decorateNonHtml", "true");
    // Start from default ParameterConverters instance
    ParameterConverters parameterConverters = new ParameterConverters();
    // factory to allow parameter conversion and loading from external
    // resources (used by StoryParser too)
    ExamplesTableFactory examplesTableFactory = new ExamplesTableFactory(new LocalizedKeywords(),
            new LoadFromClasspath(embeddableClass), parameterConverters);
    // add custom converters
    parameterConverters.addConverters(new DateConverter(new SimpleDateFormat("yyyy-MM-dd")),
            new ExamplesTableConverter(examplesTableFactory));

    return new MostUsefulConfiguration()
            .useStoryControls(new StoryControls().doDryRun(false).doSkipScenariosAfterFailure(false))
            .useStoryLoader(new LoadFromURL())
            .useStoryParser(new RegexStoryParser(examplesTableFactory))
            .useStoryPathResolver(new UnderscoredCamelCaseResolver())
            .useStoryReporterBuilder(
                    new StoryReporterBuilder()
                            .withCodeLocation(CodeLocations.codeLocationFromClass(embeddableClass))
                            .withDefaultFormats().withPathResolver(new ResolveToPackagedName())
                            .withViewResources(viewResources).withFormats(org.jbehave.core.reporters.Format.HTML, 
                                    org.jbehave.core.reporters.Format.TXT, org.jbehave.core.reporters.Format.XML)
                            .withFailureTrace(true).withFailureTraceCompression(true).withCrossReference(xref))
            .useParameterConverters(parameterConverters)
            .useStepPatternParser(new RegexPrefixCapturingPatternParser("%")) 
            .useStepMonitor(xref.getStepMonitor());
    }

@Override
public InjectableStepsFactory stepsFactory(){
    return new InstanceStepsFactory(configuration(), new LoginSteps());
}

@Override 
protected List<String> storyPaths(){
    String codeLocation = org.jbehave.core.io.CodeLocations.codeLocationFromClass(this.getClass()).getFile();
    return new StoryFinder().findPaths(codeLocation, asList("**/login_trial.story"),
                asList(""), "file:" + codeLocation);
}

}

共有1个答案

长孙鸿波
2023-03-14

我找到了。罪魁祸首就在这里:

.useStepPatternParser(new RegexPrefixCapturingPatternParser("%"))

这导致JBehave无法识别@given注释,因此JBehave假定所有内容都需要一个步骤,并将它们都列为挂起(或者跳过它们,因为它们缺少@given步骤)。一旦我拉出这部分配置,一切都很酷。

 类似资料:
  • 我的构建文件如下所示,并附上了我的文件夹路径。当我运行任务时,它显示未定义的步骤,并要求再次执行步骤。 在此输入图像描述 我在gradle创建了自己的任务来运行cucumber测试

  • 我不能为一个项目用cucumber执行简单的测试。我在Intellij13社区,使用cucumber插件。 我在features目录中编写了我的features文件,我还通过插件实现了创建它们的步骤。intellij可以识别功能文件中的我的步骤,它可以导航并转到步骤实现。当我尝试运行我的场景时,if无法声明“未定义的步骤”。任何帮助都将不胜感激。 以下是我如何组织我的项目:

  • 我已经写了我的firsy cucumber特征文件。当我将功能文件作为Cucumber功能运行时,会出现以下错误 “警告:cucumber-jvm的--format选项不推荐使用。请改用--plugin。”-我在我的@CucumberOptions of runner类中使用了“plugin”,但仍然得到相同的错误 场景:验证登录页面#c:/selenium/regressiontest/modu

  • 我想在每个步骤之前和之后执行一些操作(而不是场景)。用cucumber怎么做? 就像jUnit中的后和前。 **我正在使用java。

  • Intellij Community Edition 2020.1.3无法识别StepDefinition中已经定义的步骤。我只使用cucumber-groovy、cucumber-core、cucumber-junit:all 5.1.3版本。 我在下面试过了,它不起作用。 Cucumber Groovy&Cucumber Java插件已经安装 未安装子步骤插件 我指的是GitHub上的这个项目