执行时自动进行代码测试

时间:2010-12-20 19:35:15

标签: c testing makefile automated-tests compilation

每个源文件都有一个函数:

unsigned char test(){
    //return true if tests succceed false otherwise
}

每次重新编译源文件时,我希望在执行可执行文件时运行该文件的测试函数,如果测试返回false则停止。但是,我只想要自构建以来未运行测试代码的代码。

我在想我可以使用makefile系统来帮助解决这个问题,因为makefile只会重新编译更改的代码,这正是我想要的。因此,我正在考虑在命令行参数中添加一些内容。我看到了一个示例,其中他们使用echo和date来添加上次修改的时间。代码会在成功执行测试代码时将上次修改的时间写入保存文件,并与下次进行比较。

有更好的方法吗?一个不依靠make?至少有没有办法不依赖于spefic unix命令?最后,即使这是不可能的,添加到文件的命令行会是什么样的。

1 个答案:

答案 0 :(得分:2)

是的,你可以根据file.c制作一个file.t目标 file.t将根据测试的成功完成生成。

如果你将你的测试函数称为“main”并将其包装在#ifdef中会更容易:

#ifdef TEST
int main() {
    if (test_something() == 1)
        return 0;
    else
        return 1;
}
#endif

当然,如果你愿意,你可以做其他更棘手的事情。

示例Makefile(使用GNU Make语法)

all: foo.t

%.t: %.c
    gcc -DTEST $< -o $@.tmp
    if ./$@.tmp ; then echo "1" > $@; rm $@.tmp ; fi

然而!你可能最好采用像CUtest(http://cutest.sourceforge.net/)这样的东西。