Система тестирования izh_test
Частные случаи
Недетерминированный результат (время, путь и т.п.)
Определённые проблемы возникают при тестировании программ, в
результатах которых присутствуют недетерминированные элементы (время, путь).
Есть два способа решить эту проблему
-
Явно обеспечить в тестируемой программе детерминированный
результат при указании определённых опций.
-
Заменять в тестовом результате недетерминированные куски
на детерминированные перед проверкой.
Первый способ более удобен при тестировании, так как с результатом не
нужно производить никаких дополнительных действий.
Пример реализации такого "тестового таймера" ниже:
time_t get_time()
{
if (cmd_line_options::use_test_timer)
{
static time_t sres= 1;
return sres++;
}
else
{
time_t res;
time(
return res;
}
} |
Однако, иногда такой способ не подходит, кроме того, он всё-таки
тестирует не совсем ту программу, с которой работает пользователь.
Если программа в выводе использует какой-то абсолютный путь, то это тоже может стать
проблемой, так как тесты могут запускаться из произвольного места на диске.
В таком случае приходится использовать не напрямую
exec_check
, а
тестовый скрипт
из следующих команд:
-
использовать сначала
exec
,
-
потом утилитой типа sed (также запускаемой при помощи
exec
) выкусывать в полученном файле путь до текущей директории
-
и только потом, используя
check
, проверять полученный файл.