Программы имеют определенные входы
"${inputArgs[@]}"
)и определенные выходы
$?
)Входы и выходы, заключенные в скобки, трудно проверить систематически. Если вы можете избежать их, то ваш набор тестов должен выглядеть следующим образом (не буквально):
./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