JBehave 中的故事计数错误

Posted

技术标签:

【中文标题】JBehave 中的故事计数错误【英文标题】:Story count is wrong in JBehave 【发布时间】:2017-03-28 20:57:24 【问题描述】:

出于某种原因,JBehave 似乎在计算错误执行的故事数。为了说明我所指的行为,我设置了以下最小示例 - 它包含一个运行简单测试的故事:

JBehaveTest.java

package test.jbehave;

import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.junit.JUnitStory;
import org.jbehave.core.reporters.Format;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;

public class JBehaveTest extends JUnitStory 

  @Override
  public Configuration configuration() 
    return new MostUsefulConfiguration()
      .useStoryLoader(new LoadFromClasspath(this.getClass()))
      .useStoryReporterBuilder(new StoryReporterBuilder()
      .withDefaultFormats()
      .withFormats(Format.CONSOLE, Format.TXT)); 
  

  @Override
  public InjectableStepsFactory stepsFactory() 
    return new InstanceStepsFactory(configuration(), new TestSteps());
  

TestSteps.java

package test.jbehave;

import org.jbehave.core.annotations.Given;
import org.junit.Assert;

public class TestSteps 

  @Given("I run a test")
  public void iRunATest() 
    Assert.assertTrue(true);
  

j_behave_test.story

Scenario: Some random text
Given I run a test

现在,我所期望的是,这会运行 1 个故事,其中包含 1 个场景。但它实际上运行了 2 个故事:

控制台输出

Processing system properties 
Using controls EmbedderControls[...]

(BeforeStories)

Running story test/jbehave/j_behave_test.story

(test/jbehave/j_behave_test.story)
Scenario: 
Given I run a test

(AfterStories)

Generating reports view to ...
Reports view generated with 2 stories (of which 0 pending) containing 1 scenarios (of which 0 pending)

我根本不明白为什么 JBehave 声称已经运行了包含 1 个场景的 2 个故事。我对 JBehave 比较陌生,所以如果你知道为什么会这样,请给我提示。谢谢!

更新 1 在过去的几天里,我经常使用 JBehave,发现这个问题在我的项目中经常出现。不幸的是,到目前为止我还没有找到解决方案,因此错误的计数一直影响着我的测试报告。

更新 2Scenario: Some random text 插入到故事文件中。

【问题讨论】:

这可能太简单了(我还没有测试过),但是您是否尝试过在故事文件的顶部简单地添加“场景:”?如果这没有任何改变,我会尝试在冒号后面加上一些文本。 @BillHileman 我将故事文件更改为 Scenario: Some random text Given I run a test 不幸的是,我仍然得到相同的行为,即 2 个故事而不是一个。 你看过输出报告了吗?尽管您只运行了一个,但报告中实际上可能有两个故事。实际上,这是设计使然。以前运行的故事(使用其他名称)的统计数据通常会保留在报告中,直到数据被删除。检查您的 target/jbehave/view/index.html 文件以查看 html 报告。如果它确实有两个故事,那是你的问题。解决方案是清除该文件夹的文件以及它的父文件夹的 (targe/jbehave) 文件并再次运行您的测试。然后它应该只报告一个故事。 @BillHileman 这不是问题所在。 HTML 报告显示正确的数字(即 1 个故事和 1 个步骤)。只是为了确保我没有在某些时候弄乱配置:您是否尝试过重现该行为? 我没有,抱歉。故事文件是否与 test.jbehave 包位于同一文件夹中?是否存在其他故事文件?由于您没有指定要运行的故事,它可能只是运行该文件夹中的每个故事。我知道报告中只有一个,感谢您的确认,但也许存在另一个故事文件,无论出于何种原因正在“处理”但未报告。我对仅使用这三个文件如何运行测试还不够熟悉。 【参考方案1】:

这实际上是 JBehave 4.x 版本中的一个错误,它在控制台上打印此信息时计算“总计”报告统计信息。但是,不会创建“总计报告”本身。你可以在这里https://jbehave.atlassian.net/browse/JBEHAVE-1186跟踪这个问题

【讨论】:

以上是关于JBehave 中的故事计数错误的主要内容,如果未能解决你的问题,请参考以下文章

ClassLoader 仅在特定线程中查找资源

故事书因反应中的 eslint 错误而失败

ARC以前的故事

php 中的 Reddit API 返回错误的验证码以提交故事

解决视图转换中的错误(故事板)

线程 1:简单故事板应用程序中的 SIGABRT 错误