Реализация `make check` или` make test`

Как я могу реализовать простой фреймворк регрессионного тестирования с помощью 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 & нераспознанными. 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]

Мои вопросы:
в тестировании «хорошего» выражения и 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]

Мои вопросы:
в тестировании «хорошего» выражения и 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 не прошел»?

23
задан J. C. Salomon 7 February 2011 в 22:58
поделиться