Как протестировать интерактивное Java-приложение с помощью огурца и арубы

Как протестировать интерактивное Java-приложение с помощью огурца и арубы

У меня есть этот сценарий Cucumber/Aruba:

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"'

Когда я пробую тот же тест с этой рубиновой программой:

puts gets

все зелено...

Я делаю что-то не так здесь?

Нужно ли использовать другой метод для чтения со стандартного ввода? System.in используется только для клавиатуры?


person victrnava    schedule 27.03.2011    source источник


Ответы (1)


Несколько вещей, которые вы могли бы попробовать:

Сначала проверьте, что Cucumber/Aruba принимает ваш вызов System.out.println, заставляя вывод быть таким, как вы ожидаете в своем тесте: т.е.

System.out.println("something");

Если это сработает, то ваше предположение о чтении стандартного ввода верное (я никогда не видел, чтобы кто-то читал со стандартного ввода так, как это делаете вы). Ниже приведен ответ, как я обычно вижу, как люди читают со стандартного ввода в Java:

Как читать ввод с несколькими строками в Java< /а>

person Clinton    schedule 28.03.2011
comment
Итак, System.out.println(Something) все еще не подхватывается и не проходит ваш тест? Похоже, aruba не воспринимает вывод Java. Получает ли он содержимое из System.err.println(Something)? - person Clinton; 30.03.2011