自动化构建工具:自动运行单元测试

5
我正在维护一个autoconf包,并希望集成自动化测试。我使用Boost Unit Test Framework进行单元测试,并成功地将其集成到该包中。这意味着可以通过make check编译它,但是它不会运行(尽管我读到make check既编译又运行测试)。因此,在构建测试后,我必须手动运行它,这很麻烦。test文件夹中的Makefile.am看起来像这样:
check_PROGRAMS = prog_test
prog_test_SOURCES = test_main.cpp ../src/class1.cpp class1_test.cpp class2.cpp ../src/class2_test.cpp ../src/class3.cpp ../src/class4.cpp
prog_test_LDADD = $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_UNIT_TEST_FRAMEWORK_LIB)

在根目录下的 Makefile.am
SUBDIRS = src test
dist_doc_DATA = README
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4

运行test/prog会输出:

Running 4 test cases...

*** No errors detected

我认为您不需要我的测试用例内容就可以回答我的问题,所以我暂时省略了它们。

那么我该如何让 automake 在每次运行make check时都运行我的测试呢?

1个回答

10

至少有一种方法可以实现这一点,其中之一就是设置TESTS变量。以下是关于automake文档的说明:

如果定义了特殊变量TESTS,其值将被视为要运行以进行测试的程序或脚本列表。

因此,添加以下代码:

TESTS = $(check_PROGRAMS)

应该指示它在make check上运行测试。


3
在进行“make check”时,仅会构建在“check_PROGRAMS”(和“check_LIBRARIES”,“check_LTLIBRARIES”等)中列出的程序,而不是在“make all”期间构建。您应该在其中列出所有测试所需但不需要由“make all”构建的程序。请注意,“check_PROGRAMS”不会自动添加到“TESTS”中,因为它通常列出了测试使用的程序,而不是测试本身。当然,如果您的所有程序都是测试用例,则可以将“TESTS = $(check_PROGRAMS)”设置为相同的值。 - William Pursell
我应该将这行代码添加到哪个文件中?它在 test/Makefile.amMakefile.am 中都没有生效。位置是否很重要? - Paddre
@Paddre,位置并不重要,将该行添加到test/Makefile.am中,根Makefile将调用它。确保在更改后重新生成Makefile.inMakefile,一种简单的方法可能是运行make distclean - xaizek
仍旧可以编译(和以前一样),但不能自动运行 :-/ - Paddre
@Paddre,我错过了目标被称为prog_test,但可执行文件名为prog。请尝试使用TESTS = prog - xaizek
@xaizek:这是一个打字错误(写成了TEST而不是TESTS-.-)。在执行automake --add-missing(安装了test-driver程序)之后,它可以正常工作(使用TESTS = $(check_PROGRAMS))。非常感谢您 :-) - Paddre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接