当前位置:  开发笔记 > 编程语言 > 正文

如何像黄瓜Ruby的puts一样在黄瓜JVM中捕获STDOUT?

如何解决《如何像黄瓜Ruby的puts一样在黄瓜JVM中捕获STDOUT?》经验,为你挑选了1个好方法。

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

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结果会绕过捕获机制,就像STDOUT.puts在Ruby中使用一样。

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



1> user108471..:

看起来可以通过写入代表当前正在运行的方案的对象来完成。

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");
  }
}

putsRuby中的调用一样,它会在JSON输出文件中捕获。尽管它不像Ruby实现那样缩进,但它还在“漂亮”输出中着色。但是,这似乎是我能找到的最接近的等效项。

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有