谢谢你的图!既然你没有测试覆盖范围,如果是我,我只需编译生成的C代码,看看它是否工作:)。你没有提到你的工具链,但是在类Unix环境中,gcc <whatever build flags> -c generated-file.c || echo 'Oops!'
应该足够了。
现在,它可能是生成的代码不是一个独立的编译单元。没有问题:写一个垫片。例如shim.c
:
#include <stdio.h>
#include "generated-file.c"
main() {
printf("%s\n", GENERATED_VERSION); //or whatever is in generated-file.c
}
然后gcc -o shim shim.c && diff <(./shim) "name of a file holding the expected output" || echo 'Oops!'
应该给你一个基本的测试。 (<()
是bash process substitution。)持有预期结果的文件可能已经存在于您的git仓库中,或者您可能可以使用Python例程将其写入磁盘。
编辑2即使您的实际工具链不适合自动化,该方法也可以工作。要测试代码的语法有效性,即使您为目标处理器使用不同的编译器,也可以使用gcc
。例如,使用gcc -ansi
进行编译将禁用一些GNU扩展,这意味着与gcc -ansi
编译的代码更有可能在另一个编译器上进行编译,而不是使用GNU扩展的全开启编译的代码进行编译。请参阅"C Dialect Options"上的gcc页面,了解您可以使用的所有不同口味(ditto C++)。
编辑顺便说一句,这是同样的方法GNU autoconf使用:写一个小的测试程序到磁盘(autoconf的称之为conftest.c
),编译它,并查看是否编译成功。测试程序(最好)是测试一切是否正常所需的最低限度。根据Python的复杂程度,您可能需要使用各自不同的垫片测试生成的代码的几个不同方面。
来源
2016-08-12 14:00:11
cxw
正则表达式不是答案。 –
请您[编辑您的问题](https:// stackoverflow。com/posts/38905560/edit),以包含C/Python/binary/codegen部分如何组合在一起的数据流图,以及您试图验证哪个阶段的输出?此外,您是否试图详尽测试构建过程的某些方面,还是在您刻录到Flash之前尝试验证您即将刻录的映像是否具有基于C或Python源代码的信息? (或别的?)谢谢! – cxw
@cxw添加了一个基本图。这只是代码生成的单元测试,所以我关心的是头文件/源文件对中存在所需的信息,而且这个对是有效的C(本身不会导致构建失败) –