31

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

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

4

5 回答 5

32

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

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

TESTS=my-test-executable

然后它应该在你时自动运行make check,如果可执行文件返回一个非零值,它将报告为测试失败。如果您有多个单元测试可执行文件,只需在TESTS变量中列出它们:

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

他们都会跑起来。

于 2008-10-06T12:56:05.437 回答
13

我正在使用检查 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
    

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

于 2013-11-29T02:07:34.523 回答
6

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

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

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

对于第二个问题,不希望 cppunit 成为依赖项,为什么不将它与您的 c++ 应用程序一起分发呢?你能把它和你的源代码一起放在你正在使用的任何存档格式(无论是 tar.gz、tar.bz2 还是 .zip)中。我过去使用过 cppunit 并且对它很满意,使用过 JUnit 和其他 xUnit 风格的框架。

于 2008-09-25T03:03:44.410 回答
2

这是一个没有依赖关系的方法:

#src/Makefile.am
check_PROGRAMS = test1 test2
test1_SOURCES = test/test1.c code_needed_to_test1.h code_needed_to_test1.c
test2_SOURCES = test/test2.c code_needed_to_test2.h code_needed_to_test2.c
TESTS = $(check_PROGRAMS)

make check自然地工作并显示格式化和汇总的输出:

$ make check
...
PASS: test1
PASS: test2
============================================================================
Testsuite summary for foo 1.0
============================================================================
# TOTAL: 2
# PASS:  2
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
  1. 当你什么make dist都不做时src/test/*将在 tarball 中。测试代码不在 dist 中,只有源代码。
  2. 当您执行make distcheck时,它将运行make check并运行您的测试。
于 2020-02-22T00:38:05.743 回答
1

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

check_PROGRAMS=testsuite

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

check-local:
    ./testsuite
于 2017-10-20T19:59:24.430 回答