autotools:如何测试需要配置文件的程序?

autotools: how to test a program which requires a configuration file?

假设我有一个 autotools 项目来构建程序 P,P 需要一个配置文件 F。例如 P=vim 和 F=~/.vimrc。或者 P=bash 和 F=~/.bashrc。 (在我的例子中 P 实际上是一个库)

autotools 提供的测试工具不允许将参数传递给被测试的程序(除非使用丑陋的包装器...),因此这样的配置文件可能被认为是一种变通方法:所以 test1 需要配置文件F1, test2 需要 F2...

因此某些测试的 Makefile.am 可能如下所示:

#test ttt is linked with program P and will test P

check_PROGRAMS= ttt
ttt_SOURCES = ttt.c
ttt_LDAD = libP.a

TESTS = ttt

EXTRA_DIST = configs/f1.cfg

现在:如何让 P 在测试期间加载文件 configs/F1、configs/F2... 并在安装后仍然加载 ~/.p_rc?

具有此类配置文件的程序非常常见....这在 autotools 中如何正确处理?

Automake通过变量sysconf_DATA来处理配置文件。安装您的软件包的用户可以通过以下方式配置配置文件的目标:

sh ./configure --sysconfdir [newpath]

否则,如果您不指定,您的配置文件将安装在默认的prefix/etc

至于在测试中使用配置文件,您可以使用变量 check_DATA 将配置文件加载到与测试二进制文件相同的目录中。

我会在保存配置文件路径的库代码中设置一个全局变量。这样,对于每个测试用例,我可以通过简单地将全局变量设置为相关文件的路径来设置不同的配置文件。