代码之家  ›  专栏  ›  技术社区  ›  Greg Rogers

如何使用GNU自动工具创建“make check”测试

  •  24
  • Greg Rogers  · 技术社区  · 17 年前

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

    这是否与现有的几乎所有单元测试框架都兼容(我曾考虑使用CPPUT)?如何将这些单元测试框架连接到make check中?我能确保我不需要安装单元测试软件来配置和构建项目的其余部分吗?

    4 回复  |  直到 6 年前
        1
  •  24
  •   jonner    16 年前

    发布时进行测试运行 make check ,您需要将它们添加到 TESTS 变量

    假设您已经构建了运行单元测试的可执行文件,那么只需将可执行文件的名称添加到tests变量中,如下所示:

    TESTS=my-test-executable
    

    然后,当您 进行检查 ,如果可执行文件返回一个非零值,它会将其报告为测试失败。如果您有多个单元测试可执行文件,只需在 测验 变量:

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

    他们都会逃跑。

        2
  •  9
  •   Ryan H.    6 年前

    我在用 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([检查],[检查>=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 = @CHECK_CFLAGS@
      
    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
      

    使用检查可以使用超时和发出信号。这很有帮助。

        3
  •  4
  •   Kyle Burton    17 年前

    你好像在第一段问了两个问题。

    第一个是关于向GNU Autotools工具链添加测试——但是,如果我理解正确的话,这些测试既用于验证构建应用程序所需的环境是否存在(依赖库和工具),也用于根据环境调整构建(平台特定的差异)。

    第二个是关于对C++应用程序的单元测试,以及在哪里调用这些测试,您建议从AutoTooCoor链中进行,大概是从配置脚本开始的。但这样做并不是传统的做法——在makefile中放置一个“测试”目标是执行测试套件的一种更传统的方式。使用自动工具构建和安装应用程序的典型步骤(至少从用户的角度,而不是从您的、开发人员的角度)是运行配置脚本,然后运行make,然后选择运行make test,最后进行安装。

    对于第二个问题,不希望CPPUnice成为依赖关系,为什么不直接将它分发给C++应用程序呢?你能把它和你的源代码放在你使用的任何一种存档格式(tar.gz、tar.bz2或.zip)中吗?我以前使用过CPPPUnit,并且很满意它,使用了JUnit和其他XUnit风格的框架。

        4
  •  0
  •   wedesoft    7 年前

    你可以用自动刹车 TESTS 运行用生成的程序 check_PROGRAMS 但这将假定您正在使用日志驱动程序和编译器来进行输出。可能更容易继续使用 校验程序 但要使用makefile中的本地规则调用测试套件,请执行以下操作:

    check_PROGRAMS=testsuite
    
    testsuite_SOURCES=...
    testsuite_CFLAGS=...
    testsuite_LDADD=...
    
    check-local:
        ./testsuite