实现`make check`或`make test`
如何使用Make实现简单的回归测试框架? (如果重要的话,我正在使用GNU Make。)
我当前的makefile看起来像这样(为简单起见而编辑):
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
测试一个“好”的表达&amp; unrecognized.in
测试一个“坏”的,用expr.cmp
&amp; 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
我想在makefile中添加一组规则,如下所示:
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]
我的问题:
•我在[东西]占位符中添加了什么?
•有没有办法用saying7ѭ替换消息说“测试expr
失败”?
没有找到相关结果
已邀请:
4 个回复
纫合峭
循环。实际上,通过这样做,您将失去并行运行测试的机会,并为自己创建额外的工作以清理临时文件(不需要)。 这是一个解决方案(以bc为例):
该解决方案直接解决您的原始问题: 您正在寻找的占位符分别为
和
,分别对应先决条件
和
。与@reinierpost注释相反,不需要临时文件。 差异消息被隐藏并使用
替换。 无论单个测试是否失败或成功,都应使用
调用makefile来运行所有测试。
仅在所有测试成功时运行。 通过利用文件命名约定(
)和文件名的GNU make函数,我们避免在定义
变量时手动枚举每个测试。作为奖励,这意味着解决方案可以扩展到数万个开箱即用的测试,因为GNU make中变量的长度是无限的。这比基于shell的解决方案更好,一旦达到操作系统命令行限制,该解决方案就会失败。
系漏
然后,在你的
:
您也可以尝试实现类似
的简单测试框架。
咖哀烈
这是基于杰克凯利的想法,包括Jonathan Leffler的提示。
驮帽俺篮号