@thewizardplusplus

Какие инструменты есть для тестирования чёрного ящика через stdin/stdout?

Мне требуется инструмент для проведения юнит-тестирования одной и той же программы, написанной на разных языках. Писать каждый раз код тестов для неё на каждом из языков, во-первых, долго, а во-вторых, что страшнее, чревато ошибками в самих тестах. Мне нужна гарантия, что все версии программы работают идентично, а если тесты будут разные, гарантировать это невозможно.

Моя идея заключается в том, чтобы составить тесты в виде групп из:

  • ключей программы;
  • входных данных, читаемых программой из stdin;
  • выходных данных, записываемых программой в stdout.


Например, некоторые тесты для утилиты wc:

[test of words]
options=-w
input=one two three
output=3

[test of characters]
options=-c
input=one two three
output=13


И вызов данных тестов:

$ some-utility --tests=wc_tests.ini --command=wc

Да, я понимаю, что написать самому подобную утилиту проще простого. Однако лучше использовать уже существующее, отлаженное и поддерживаемое, решение, чем создавать очередной велосипед.
  • Вопрос задан
  • 500 просмотров
Решения вопроса 1
@thewizardplusplus Автор вопроса
Нашёл такое решение: Bats (Bash Automated Testing System). Это система юнит-тестирования для скриптов на bash и консольных утилит. Позволяет делать то, что я хотел, а так же гораздо больше.

Пример, приведённый в вопросе, на Bats будет выглядеть следующим образом (файл test.bats):

#!/usr/bin/env bats

@test "test of words" {
	result="`printf 'one two three' | wc -w`"
	[[ "$result" == 3 ]]
}

@test "test of characters" {
	result="`printf 'one two three' | wc -c`"
	[[ "$result" == 13 ]]
}


Запуск:

$ bats test.bats

Вывод:

✓ test of words
✓ test of characters

2 tests, 0 failures
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы