编程语言
首页 > 编程语言> > java – 如何在Cucumber JVM中捕获STDOUT,如Cucumber Ruby的put?

java – 如何在Cucumber JVM中捕获STDOUT,如Cucumber Ruby的put?

作者:互联网

在vanilla Cucumber中,通过调用放入步骤定义输出的任何内容都将被捕获为“测试输出”并进行相应格式化,如下面的输出示例所示:

Feature: A simple thing

  Scenario: A simple scenario # features/simple.feature:3
    Given I do a step         # features/steps/step.rb:1
      This text is output with puts

如上所示,它有助于缩进“漂亮”的输出格式.在JSON格式中,它甚至以结构化方式捕获:

    "keyword": "Scenario",
    "name": "A simple scenario",
    "line": 3,
    "description": "",
    "id": "a-simple-thing;a-simple-scenario",
    "type": "scenario",
    "steps": [
      {
        "keyword": "Given ",
        "name": "I do a step",
        "line": 4,
        "output": [
          "This text is output with puts"
        ],
      }
    ],

以上是使用简单的特征文件和步骤定义生成的,如下所示:

Given(/^I do a step$/) do
  puts 'This text is output with puts'
end

在Java中实现Cucumber步骤时是否存在等效函数,我可以使用它以相同的方式捕获此输出?打印到System.out导致绕过捕获机制,就像在Ruby中使用STDOUT.puts一样.

我没有看到任何使用此功能的Cucumber-JVM示例,与Ruby Cucumber的许多示例不同,但是Cucumber-JVM在JSON输出中显然有一个输出用于“输出”,因此我想必须有写入该字段的方法.

解决方法:

看起来这可以通过写入表示当前运行场景的对象来完成.

public class StepDefs {
  private Scenario scenario;

  /* Need to capture the scenario object in the instance to access it
   * in the step definition methods. */
  @Before
  public void before(Scenario scenario) {
    this.scenario = scenario;
  }

  @Given("^I do a step$")
  public void iDoAStep() {
    scenario.write("This text is output with scenario.write");
  }
}

与Ruby中的puts调用一样,这会在JSON输出文件中捕获.它也在“漂亮”输出中着色,尽管它没有像Ruby实现那样缩进.然而,这似乎是我能找到的最接近的等价物.

标签:java,cucumber,cucumber-jvm
来源: https://codeday.me/bug/20190628/1313811.html