如何让autotools测试读取文件?

时间:2016-05-02 09:30:05

标签: unit-testing autotools automake

我的autotools项目有几个单元测试。 其中一个测试(filereader)需要读取文件(data/test1.bin

这是我的文件系统布局: - libfoo / tests / filereader.c - libfoo / tests / data / test1.bin

和我的libfoo / tests / Makefile.am:

AUTOMAKE_OPTIONS = foreign
AM_CPPFLAGS = -I$(top_srcdir)/foo
LDADD = $(top_builddir)/src/libfoo.la

EXTRA_DIST = data/file1.bin

TESTS = filereader
check_PROGRAMS= filereader
filereader_SOURCES = filereader.c

这很有效,只要我在树中构建。 但是,当运行测试套件外树(例如make distcheck)时,filereader测试无法再找到输入文件。

这显然是因为只有源树包含输入文件,而不包含构建树。

我想知道解决这个问题的规范方法是什么?

  • 将测试文件的目录编译为unittest(AM_CPPFLAGS+=-DSRCDIR=$(srcdir)
  • 将合格的输入文件作为cmdline参数传递给测试? (例如$(builddir)/filereader $(srcdir)/data/file1.bin
  • 将输入文件从源树复制到构建树? (cp $(srcdir)/data/file1.bin $(builddir)/data/file1.bin?一个合适的制造规则怎么样?)

2 个答案:

答案 0 :(得分:1)

通常,解决方案是将文件的路径定义为unittest,这是您布置的第一个选项。第二个也是可能的,但它需要使用中间驱动程序脚本。

我建议避开第三个,但是如果你想沿着这条路走,请使用$(LN_S)而不是cp;这样可以减少测试的I / O负载。

答案 1 :(得分:0)

有一种方法可以通过autoconf来实现。从netcdf-c configure.ac:

##
# Some files need to exist in build directories
# that do not correspond to their source directory, or
# the test program makes an assumption about where files
# live.  AC_CONFIG_LINKS provides a mechanism to link/copy files
# if an out-of-source build is happening.
##

AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat1.nc:nc_test4/ref_hdf5_compat1.nc])
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat2.nc:nc_test4/ref_hdf5_compat2.nc])
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat3.nc:nc_test4/ref_hdf5_compat3.nc])

AC_CONFIG_LINKS([nc_test4/ref_chunked.hdf4:nc_test4/ref_chunked.hdf4])
AC_CONFIG_LINKS([nc_test4/ref_contiguous.hdf4:nc_test4/ref_contiguous.hdf4])