azm*_*euk 5 c testing unit-testing autotools glib
如何使用autotools正确设置GLib测试套件?我的项目已经使用了GLib.设置测试套件必须做的最小修改是什么?是否包含一些m4文件?那么如何启动测试呢?
谢谢
eba*_*ssi 14
自GLib 2.38以来,将GLib测试套件与autotools构建系统集成的推荐方法是依靠autotools内部的TAP(Test Anything Protocol)驱动程序.在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])
Run Code Online (Sandbox Code Playgroud)
所以你必须把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
Run Code Online (Sandbox Code Playgroud)
那么你需要使用里面定义的变量glib-tap.mk
来添加测试二进制文件和数据.例如,如果您有以下测试单元文件:
foo.c
bar.c
baz.c
blah.c
Run Code Online (Sandbox Code Playgroud)
分布式tarball附带的一些测试数据:
foo.data.txt
bar.data.txt
Run Code Online (Sandbox Code Playgroud)
以及一些自动生成的数据,它应该在每次构建测试套件时重建:
blah.data.txt
Run Code Online (Sandbox Code Playgroud)
你需要申报:
# 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
Run Code Online (Sandbox Code Playgroud)
就是这样.现在,每次make check
在构建中运行时,都会构建并执行测试套件,并且您将获得已通过和失败的测试单元的报告.
如果你没有,或者不能依赖,最近GLib库的版本,然后而是采用glib-tap.mk
和tap-test
你将需要复制glib.mk
在您的项目,包括它以同样的方式如上文所述.规则完全相同,因此您无需更改它们.在这种情况下,测试套件中的每个单元将使用gtester
GLib在系统位置安装的Python脚本运行.
最后,如果您想要一个GLib测试系统如何与(小)库集成的示例,您可以查看JSON-GLib:https://git.gnome.org/browse/json-glib/
归档时间: |
|
查看次数: |
1361 次 |
最近记录: |