我正在使用Automake进行一个项目,除了典型的单元测试之外,该项目开始具有更长时间运行的集成/部署样式测试。问题是在正常编程期间,不需要运行较长的测试,只需要较短的单元测试集。但是,最终的合并和/或存储库构建必须运行完整的测试套件。
有没有一种标准的方法来处理这个与automake?理想情况下,我希望只有两个目标,即运行所有内容的正常check
目标,以及运行简化测试的check-lite
目标。
该项目分布在多个子项目和目录中,因此标准的自动化方法非常适合确保一致性。
答案 0 :(得分:1)
我建议在--enable-extended-tests
脚本中添加configure
选项:
AC_MSG_CHECKING([whether to run extended tests])
AC_ARG_ENABLE([extended-tests],
[AS_HELP_STRING([--enable-extended-tests], [run full integration tests])],
[enable_extended_tests="yes"], [enable_extended_tests="no"])
AC_MSG_RESULT([$enable_extended_tests])
AM_CONDITIONAL([EXTENDED_TESTS], [test "X$enable_extended_tests" != "Xno"])
然后您可以在Makefile.am中使用Automake条件:
if EXTENDED_TESTS
EXTRA_TESTS = extra_test1 extra_test2 ...
else
EXTRA_TESTS =
endif
TESTS = $(EXTRA_TESTS) normal_test1 normal_test2 ...
答案 1 :(得分:0)
如果您已根据测试类型将测试套件拆分为单独的目录,则可以向顶级Makefile.am
添加一些其他目标以执行部分测试套件运行。
例如,如果您的树被组织为:
$(srcdir)
- tests
- unit
- integration
您可以将以下内容添加到makefile中:
check-unit:
$(MAKE) $(AM_MAKEFLAGS) -C tests/unit check
check-integration:
$(MAKE) $(AM_MAKEFLAGS) -C tests/integration check
现在当你运行make check-unit
时,它只会运行你的单元测试。运行make check-integration
将运行另一半测试。标准make check
目标将继续运行整个套件。
如果您无法在单个目录下组织所有测试,则可以向目标添加其他$(MAKE)
次调用。它确实需要一些顶层项目结构的知识,但是没有一种明确的方法可以从子目录中的Makefile.am
文件中传递所需的信息。