Automated tests 汽车制造:如何处理全球和本地';进行检查';有效地?

Automated tests 汽车制造:如何处理全球和本地';进行检查';有效地?,automated-tests,automake,Automated Tests,Automake,在一个更大的项目中,我设置了/tests/Makefile.am,以便在调用makecheck时运行许多测试。文件global_wrapper.c包含设置/分解代码,它调用在多个子目录中实现的测试函数 TESTS = global_test check_PROGRAMS = global_test global_test_SOURCES = global_wrapper.c foo/foo_test.c bar/bar_test.c 效果很好。但是测试需要很长时间,所以我希望能够选择只从单

在一个更大的项目中,我设置了
/tests/Makefile.am
,以便在调用
makecheck
时运行许多测试。文件
global_wrapper.c
包含设置/分解代码,它调用在多个子目录中实现的测试函数

TESTS = global_test

check_PROGRAMS = global_test

global_test_SOURCES = global_wrapper.c foo/foo_test.c bar/bar_test.c
效果很好。但是测试需要很长时间,所以我希望能够选择只从单个子目录执行测试。我一开始就是这样做的

我添加了子目录:

SUBDIRS = foo bar
在子目录中,我添加了本地包装器和
Makefile.am

TESTS = foo_test

check_PROGRAMS = foo_test

# the foo_test.c here is of course the same as in the global Makefile.am
foo_test_SOURCES = foo_wrapper.c foo_test.c
这也非常有效——当我在子目录
foo
中调用
makecheck
时,只执行foo测试

然而,当我现在在
/tests
中调用
make check
时,所有测试都会执行两次。一次通过
全局测试
,一次通过本地测试程序

如果省略全局
Makefile.am
中的
SUBDIRS
语句,则子目录makefiles不会生成。如果我从本地
Makefile.am
中省略
TESTS
makecheck
对本地目录没有任何作用

TESTS = global_test

check_PROGRAMS = global_test

global_test_SOURCES = global_wrapper.c foo/foo_test.c bar/bar_test.c

我对汽车制造商不是很熟悉,但我很肯定有办法解决这个难题。这里有人能给我一个提示吗?

你不能从“全局测试”中删除已经在子目录中执行的任何测试吗?(这样它们就不会被执行两次。)

我认为您可以覆盖顶层的
检查规则来定义环境变量:

check:
        DISABLE_SUBTESTS=1 make check-recursive
然后在子目录中测试
禁用_子测试
,以决定是否实际运行测试


(就我个人而言,我宁愿在现有的
make check
框架中工作,隐藏测试的输出,而不是像这样覆盖生成的规则。)

中断测试。在tests/Makefile.am中,执行以下操作:

TESTS = foo_test bar_test 测试=foo\u测试条\u测试 并使用以下内容适当地构建foo_测试条

foo_test_SOURCES = foo/foo_wrapper.c foo/foo_test.c bar_test_SOURCES = bar/bar_wrapper.c bar/bar_test.c foo_test_SOURCES=foo/foo_wrapper.cfoo/foo_test.c bar\u test\u SOURCES=bar/bar\u wrapper.c bar/bar\u test.c
现在,如果您执行原始的“检查”,两个测试都将运行。如果您只想运行一个测试,可以使用“make check TESTS=foo\u test”或“make check TESTS=bar\u test”来执行,并且只有适当的测试才会运行。通常,Makefile.am会列出默认情况下将在测试中运行的所有测试,并且用户会在生成时选择备用测试。当然,如果您经常运行测试,您可以在shell会话中“export tests=foo_test”,然后只键入“make check”。

测试生成大量输出,并在最后打印它们的摘要。按顺序执行子目录测试将淹没该输出中的实际结果,这就是为什么将所有测试捆绑到一个全局套件中是有用的(您可以在输出的末尾获得一个适当的一目了然的摘要)。我的测试通常有一个详细选项。当它们从make check运行时,它们是静默的:标准输出被重定向到日志文件,只有结论被写入stderr(在失败的情况下提到日志文件)。这样,重要信息就不会隐藏在输出中。当手动运行测试时,测试会非常冗长,标准输出会发送到终端。设置环境变量的技巧很好,但这无助于解决我的问题:对于全局测试运行,在输出的末尾有一个所有测试运行的摘要。Automake生成的Makefile会在最后输出一个摘要。它告诉你“所有2个测试都通过了”。如果您想要更明确的内容,您的测试应该为您生成输出。查看检查单元测试框架的示例;正如我所说,我对汽车制造商不太熟悉,也不知道你们可以改写规则。(而且无论如何也不会知道baout检查递归。)我会检查这个。