如何使用cucumber和aruba测试交互式java应用程序

如何使用cucumber和aruba测试交互式java应用程序,java,cucumber,Java,Cucumber,如何使用cucumber和aruba测试交互式java应用程序 我有一个黄瓜/阿鲁巴的场景: Scenario: Simple echo Given I run `java -cp /bin Echo` interactively When I type "something\n" Then the output should contain "something" 要测试此简单java程序,请执行以下操作: import java.util.*; class Echo {

如何使用cucumber和aruba测试交互式java应用程序

我有一个黄瓜/阿鲁巴的场景:

Scenario: Simple echo
  Given I run `java -cp /bin Echo` interactively
  When I type "something\n"
  Then the output should contain "something"
要测试此简单java程序,请执行以下操作:

import java.util.*;
class Echo {
    public static void main(String[] args) {
        Scanner stdin = new Scanner(System.in);
        System.out.println(stdin.next());
    }
}
当我运行测试时,它失败了,我得到以下错误:

Then the output should contain "something"
    expected "" to include "something" (RSpec::Expectations::ExpectationNotMetError)
    features/cli.feature:15:in `Then the output should contain "something"'
当我用这个ruby程序尝试相同的测试时:

puts gets
都是绿色的

我做错什么了吗


是否必须使用其他方法读取标准输入?System.in是否仅用于键盘?

您可以尝试以下几种方法:

首先测试Cucumber/Aruba是否正在接收System.out.println调用,方法是强制输出为您在测试中期望的输出:即

System.out.println("something");
如果这是可行的,那么你就会预感阅读标准输入是正确的(我从未见过有人以你这样的方式阅读标准输入)。下面的答案是我通常看到人们阅读Java标准输入的方式:

所以System.out.println(“某物”)仍然没有被接收并通过测试?听起来阿鲁巴没有获得Java输出。它是否从System.err.println(“某物”)中提取内容?