进行distcheck和需要输入文件的测试

Mar*_*sch 7 automake unit-testing

我最近将构建系统转换为automake/autoconf.在我的项目中,我有一些单元测试,需要在运行它们的目录中输入一些输入数据文件.当我运行make distcheck并尝试VPATH构建时,这些测试失败,因为它们显然不是从输入文件所在的目录运行的.我想知道是否有一些快速解决方案.例如,我可以以某种方式告诉系统不要在make distcheck上运行这些测试(但仍然在make check上运行它们)?或者在运行测试之前cd到文件所在的目录?

小智 8

我有同样的问题,并使用类似威廉的解决方案.我的Makefile.am看起来像这样:

EXTRA_DIST = testdata/test1.dat

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"
Run Code Online (Sandbox Code Playgroud)

然后,在我的unittest中,我使用DATADIR定义:

string path = DATADIR "/testdata/test1.dat"
Run Code Online (Sandbox Code Playgroud)

这适用于make checkmake distcheck.


Wil*_*ell 5

典型的解决方案是编写测试,以便它们在源目录中查找数据文件.例如,您可以$srcdir在测试中引用,或转换testtest.in并引用@srcdir@.

如果您的测试都在源目录中,则可以通过在Makefile.am中设置TESTS_ENVIRONMENT来运行该目录中的所有测试:

TESTS_ENVIRONMENT = cd $(srcdir) &&
Run Code Online (Sandbox Code Playgroud)

如果您的某些测试是由configure创建的,那么这将失败,因此只能在build目录中生存,在这种情况下,您可以选择性地使用以下内容进行cd:

 TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } &&
Run Code Online (Sandbox Code Playgroud)

试图像这样使用TESTS_ENVIRONMENT是最脆弱的,最好编写测试,以便它们在源目录中查找数据文件.