如何使用 autotools 正确设置 GLib 测试套件?我的项目已经使用 GLib。设置测试套件我必须做的最小修改是什么?是否包含一些 m4 文件?那么如何启动测试呢?
谢谢
如何使用 autotools 正确设置 GLib 测试套件?我的项目已经使用 GLib。设置测试套件我必须做的最小修改是什么?是否包含一些 m4 文件?那么如何启动测试呢?
谢谢
自 GLib 2.38 起,将 GLib 测试套件与 autotools 构建系统集成的推荐方法是依赖 autotools 本身内部的 TAP(测试任何协议)驱动程序。在 2.38 之前,测试套件基于一个特定的品牌,带有一组自定义的 make 规则,以及一个运行和合并结果的 python 脚本。仍然可以使用它,并且下面的大部分内容都适用,但我的建议是使用 TAP 驱动程序支持,因为这就是从现在开始支持的内容。
GLib 提供这三个文件:
Makefile.am
每个测试目录中的 Makefile:https ://git.gnome.org/browse/glib/tree/glib-tap.mk这些文件需要从 GLib 存储库复制到您自己的存储库中,因为它们仍然是新的——但将来它们将安装在与$prefix
GLib 相同的位置,因此项目将能够依赖它们的存在,就像它们已经做的那样用于自省生成宏。
我将假设您configure.ac
有这两个指令来设置宏和辅助目录:
AC_CONFIG_MACRO_DIR([build])
所以你必须把它glibtests.m4
放在你的$top_srcdir/build
目录里面;该glib-tap.mk
文件可以在 中$top_srcdir
,但我更喜欢将所有与 autotools 相关的内容放在同一目录中;最后,tap-test
启动器需要在 中$top_srcdir
,尽管您可以通过修改LOG_COMPILER
里面的变量来改变它的位置glib-tap.mk
。
你需要GLIB_TESTS
在你的configure.ac
. 该指令将添加configure
启用安装测试的选项,以及启用在构建项目的其余部分时始终构建测试套件的选项,而不是仅在运行时构建它make check
。这两个选项的默认值都是禁用的。
我还将假设您的测试套件将在 下$top_srcdir/tests
,因此$top_srcdir/tests/Makefile.am
您需要包含glib-tap.mk
正确的路径:
include $(top_srcdir)/build/glib-tap.mk
那么您将需要使用内部定义的变量glib-tap.mk
来添加测试二进制文件和数据。例如,如果您有以下测试单元文件:
foo.c
bar.c
baz.c
blah.c
分布式压缩包附带的一些测试数据:
foo.data.txt
bar.data.txt
以及一些自动生成的数据,每次构建测试套件时都应该重新构建它们:
blah.data.txt
您需要声明:
# test binaries
test_programs = \
foo \
bar \
baz \
blah
# data distributed in the tarball
dist_test_data = \
foo.data.txt \
bar.data.txt
# data not distributed in the tarball
test_data = \
blah.data.txt
就是这样。现在,每次您make check
在构建中运行时,都会构建并执行测试套件,您将获得一份包含通过和失败测试单元的报告。
如果您没有或不能依赖最新版本的 GLib,那么您需要将其复制到您的项目中,并以与上述相同的方式包含它,而不是使用glib-tap.mk
和。规则完全相同,因此您无需更改它们。在这种情况下,测试套件中的每个单元都将使用GLib 在系统位置安装的 Python 脚本运行。tap-test
glib.mk
gtester
最后,如果您想了解 GLib 测试系统如何与(小型)库集成的示例,您可以查看 JSON-GLib:https ://git.gnome.org/browse/json-glib/