Как я могу реализовать простой каркас регрессионного теста с помощью Make? (Я использую GNU Make, если это имеет значение.)
Мой текущий make-файл выглядит примерно так (отредактировано для простоты):
OBJS = jscheme.o utility.o model.o read.o eval.o print.o
%.o : %.c jscheme.h
gcc -c -o $@ $<
jscheme : $(OBJS)
gcc -o $@ $(OBJS)
.PHONY : clean
clean :
-rm -f jscheme $(OBJS)
Я хотел бы иметь набор регрессионных тестов, например, , expr.in
тестирование "хорошего" выражения и unrecognized.in
тестирование "плохого" выражения с expr.cmp
& unrecognized.cmp
быть ожидаемым результатом для каждого. Ручное тестирование будет выглядеть так:
$ jscheme < expr.in > expr.out 2>&1
$ jscheme < unrecognized.in > unrecognized.out 2>&1
$ diff -q expr.out expr.cmp # identical
$ diff -q unrecognized.out unrecognized.cmp
Files unrecognized.out and unrecognized.cmp differ
Я подумал добавить набор правил в make-файл, который будет выглядеть примерно так:
TESTS = expr.test unrecognized.test
.PHONY test $(TESTS)
test : $(TESTS)
%.test : jscheme %.in %.cmp
jscheme < [something.in] > [something.out] 2>&1
diff -q [something.out] [something.cmp]
Мои вопросы:
• Что я помещаю в [что-то] заполнители?
• Есть ли способ заменить сообщение из diff
на сообщение «Тест expr
не пройден»?