Лучший способ тестирования инструментов командной строки?
У меня есть большая коллекция утилит командной строки, которые мы пишем сами и часто используем. На данный момент их тестирование очень громоздко, и, следовательно, мы проводим не столько тестирование, сколько должны.
Я задаюсь вопросом, может ли кто-нибудь предложить хорошие методы или инструменты для хорошей работы такого рода вещей.
Это UNIX
Ответы
Ответ 1
Aruba - это расширение Cucumber для тестирования приложений командной строки, написанных на любом языке программирования.
Чтобы использовать его, вам понадобится ruby для запуска тестов, но цель aruba - предоставить библиотеку предопределенных определений шагов, чтобы вам не нужно было писать какой-либо код ruby для создания работоспособного набора тестов. (Хотя в какой-то момент вы, вероятно, захотите написать немного рубина, чтобы сделать несколько пользовательских шагов.)
Вы можете увидеть сложный пример инструмента командной строки, протестированного на aruba, здесь: jingweno/gh
Ответ 2
Я рекомендую структурировать код инструмента командной строки, чтобы утилита командной строки была клиентом библиотеки функций и/или классов.
Вместо того, чтобы просто использовать std:: cout для вывода на печать, имейте, чтобы функция библиотек взяла ссылку на ostream, которая по умолчанию соответствует std:: cout. Когда вы тестируете, укажите std:: stringstream для сбора результата.
Наконец, просто сравните результаты своей утилиты с ожидаемыми результатами с помощью вашей любимой модульной системы тестирования.
(Я прошу прощения за конкретный пример на С++... Я уверен, что есть способы делать подобные вещи и на других языках).
Ответ 3
Вы можете написать тесты, которые напоминают интерактивную сессию оболочки, используя Cram. Он имеет гибкий формат спецификации теста, который позволяет сопоставлять выходные данные с использованием регулярных выражений Perl или подстановочных знаков, похожих на shell. Cram будет воспроизводить команды из теста, сравнивать вывод с эталоном и сообщать о различиях.
Ответ 4
Вы должны иметь возможность вызывать их из оболочки script (пакетный файл, в операционных системах MS), перенаправлять вывод в файл, затем программно сканировать файл, чтобы убедиться, что он имеет правильный вывод. Я не знаю рамки тестирования, которая автоматизирует это для вас, но она должна быть достаточно простой, чтобы настроить ее самостоятельно.
Ответ 5
Я немного поработал с этим (loooong time hehe), используя Expect, чтобы проверить, что произошло, что я, umm, ожидается
Ответ 6
Летучие мыши (Bash Автоматизированная система тестирования) от Сэма Стивенсона. Он крошечный, написанный исключительно в оболочке и имеющий хороший набор функций.
Раньше предполагаемая Аруба выглядела интересной, но в некоторых случаях это могло бы быть спокойным излишеством с точки зрения зависимостей (рубин, огурец)
Ответ 7
Вы можете сделать это из командного файла или другого сервера сценариев Windows.
Но я обещаю использовать планировщик задач, например (http://www.splinterware.com/products/wincron.htm) или другое бесплатное/профессиональное программное обеспечение.
Там вы можете легко скопировать/вставить параметры командной строки, которые вы должны изменить, когда вы хотите проверить свое программное обеспечение примерно на 100 раз?!
Ответ 8
Вы можете использовать perl с библиотекой Test:: more, которая предоставляет отличную инфраструктуру для тестирования CLI.
Хотя в основном это предназначено для модульного тестирования, вы можете расширить его, чтобы протестировать рабочие процессы пользователей.
Некоторые из методов:
# Various ways to say "ok"
ok($got eq $expected, $test_name);
is ($got, $expected, $test_name);
isnt($got, $expected, $test_name);
# Rather than print STDERR "# here what went wrong\n"
diag("here what went wrong");
like ($got, qr/expected/, $test_name);
unlike($got, qr/expected/, $test_name);
cmp_ok($got, '==', $expected, $test_name);
command-line automation testing perl-testing
Ответ 9
Я разработал инструмент "Точно" https://github.com/emilkarlen/exactly
Это выполняет вещь, чтобы проверить во временном каталоге песочницы. README содержит ряд примеров.
Тест гипотетической программы "классифицировать файлы путем перемещения в соответствующий каталог" может выглядеть следующим образом:
[setup]
dir input
dir output/good
dir output/bad
file input/a.txt = <<EOF
GOOD contents
EOF
file input/b.txt = <<EOF
bad contents
EOF
[act]
classify-files-by-moving-to-appropriate-dir GOOD input/ output/
[assert]
dir-contents input empty
exists output/good/a.txt : type file
dir-contents output/good num-files == 1
exists output/bad/b.txt : type file
dir-contents output/bad num-files == 1