2008-09-25 93 views
22

我正在使用GNU autotools构建特定项目的系统。我想开始编写用于验证的自动化测试。我只想输入“make check”让它自动运行这些。我的项目是用C++编写的,但我仍然对编写其他语言的自动化测试感到好奇。如何使用GNU autotools创建“make check”测试

这与几乎所有的单元测试框架(我正在考虑使用cppunit)兼容吗?我如何将这些单元测试框架挂钩进行检查?我能确保我不需要安装单元测试软件来配置和构建项目的其余部分吗?

回答

21

为了使测试运行时发出make check,你需要将它们添加到TESTS变量

假设你已经建立了一个运行单元测试的可执行文件,你只需要添加的可执行文件的名称为TESTS变量是这样的:

TESTS=my-test-executable 

应该被自动运行,当你make check,如果可执行文件返回一个非零值,它会报告,作为一个测试失败。如果你有多个单元测试可执行文件,只列出他们都在TESTS变量:

TESTS=my-first-test my-second-test my-third-test 

他们都将得到执行。

+1

如果您需要调整运行测试的环境(例如PATH),您可能还想使用TESTS_ENVIRONMENT变量。 – tmatth 2010-03-18 18:41:39

4

您似乎在第一段中提出了两个问题。

第一个是关于将测试添加到GNU autotools工具链 - 但这些测试(如果我正确理解你的话)既用于验证构建应用程序所需的环境是否存在(依赖库和工具)使构建适应环境(特定于平台的差异)。

第二种是单元测试你的C++应用程序,并在那里调用这些测试,你提出了从自动工具工具链这样做,大概是从配置脚本。这样做并不常见,但在Makefile中添加一个“测试”目标是执行测试套件的一种更传统的方式。对于(从用户的角度来看,从你的,开发人员的角度,至少,不是)编译和安装有自动工具应用的典型步骤是运行配置脚本,然后运行make,然后任选运行make测试,最终使安装。

对于第二个问题,不希望将cppunit作为依赖项,为什么不将它与您的C++应用程序一起分发呢?你可以把它的权利在你使用什么都存档格式(无论是tar.gz的,TAR.BZ2或.zip)与源代码一起。我使用的CppUnit在过去,是满意的,有使用JUnit和其他的xUnit风格框架。

+0

任何洞察下来票呢?你觉得这个问题没有直接解决? – 2008-09-25 18:52:44

8

我使用Check 0.9.10

configure.ac 
    Makefile.am 
    src/Makefile.am 
    src/foo.c 
    tests/check_foo.c 
    tests/Makefile.am 
  1. ./configure.ac

    PKG_CHECK_MODULES([CHECK],[查> = 0.9。10])

  2. ./tests/Makefile.am测试代码

    TESTS = check_foo 
    check_PROGRAMS = check_foo 
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h 
    check_foo_CFLAGS = @[email protected] 
    
  3. 和编写测试代码,./tests/check_foo.c

    START_TEST (test_foo) 
    { 
        ck_assert(foo() == 0); 
        ck_assert_int_eq(foo(), 0); 
    } 
    END_TEST 
    
    /// And there are some tcase_xxx codes to run this test 
    

使用检查您可以使用超时,提高信号。这是非常有帮助的。

0

您可以使用Automake的TESTS来运行使用check_PROGRAMS生成的程序,但这将假定您正在使用日志驱动程序和编译器输出。这可能是更容易仍然使用check_PROGRAMS但在Makefile中使用本地规则来调用测试套件:

check_PROGRAMS=testsuite 

testsuite_SOURCES=... 
testsuite_CFLAGS=... 
testsuite_LDADD=... 

check-local: 
    ./testsuite