Сокращение длинного сравнения строк if / test

Программы имеют определенные входы

  • командная строка ( "${inputArgs[@]}" )
  • stdin
  • (+ возможно: неявные входные файлы, состояние системы)

и определенные выходы

  • статус возврата ( $? )
  • stdout
  • stderr
  • (+ возможно: неявные выходные файлы, изменения состояния системы)

Входы и выходы, заключенные в скобки, трудно проверить систематически. Если вы можете избежать их, то ваш набор тестов должен выглядеть следующим образом (не буквально):

./program "${inputArgs[@]}" < stdin.txt > stdout.txt 2>stderr.txt; status=$?

if [ "$status" -eq "$expectedStatus" ] && cmp stdout.txt expectedStdout.txt && cmp stderr.txt expectedStderr.txt; then 
    echo OK
else
    [ ! $status -eq $expectedStatus ] && echo "Status $status != $expectedSattus" 
    diff stdout.txt expectedStdout.txt
    diff stderr.txt expectedStderr.txt
fi
0
10.12.2017, 17:39
0 ответов

Теги

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