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

时间:2012-07-04 21:16:17

标签: unit-testing automake

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

2 个答案:

答案 0 :(得分:8)

我遇到了同样的问题并且使用了类似威廉的解决方案。我的Makefile.am看起来像这样:

EXTRA_DIST = testdata/test1.dat

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"

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

string path = DATADIR "/testdata/test1.dat"

这适用于make checkmake distcheck

答案 1 :(得分:5)

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

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

TESTS_ENVIRONMENT = cd $(srcdir) &&

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

 TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } &&

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