FindCxxTest

查找 CxxTest,这是一个 C++ 单元测试框架套件,并提供了一个辅助命令来创建测试运行器并将它们与 CTest 集成。

find_package(CxxTest [...])

结果变量

此模块定义了以下变量

CxxTEST_FOUND

版本 4.2 中添加。

一个布尔值,指示是否找到 CxxTest 框架。

CXXTEST_INCLUDE_DIRS

包含使用 CxxTest 所需头文件的目录。

CXXTEST_TESTGEN_EXECUTABLE

找到的 CxxTest 测试生成器脚本(基于 Perl 或 Python)的路径,根据找到的解释器或用户指定的首选项选择。

CXXTEST_TESTGEN_INTERPRETER

用于运行测试生成器脚本的找到的 Perl 或 Python 解释器的路径(如果需要,例如在不支持脚本 shebang 行的平台上)。

缓存变量

以下缓存变量也可以设置

CXXTEST_PYTHON_TESTGEN_EXECUTABLE

基于 Python 的 CxxTest 测试生成器脚本的路径。

CXXTEST_PERL_TESTGEN_EXECUTABLE

基于 Perl 的 CxxTest 测试生成器脚本的路径。

注意

基于 Perl 的测试生成器脚本已在 CxxTest 4.0 版本中移除,改为使用基于 Python 的脚本。

提示

此模块在调用 find_package(CxxTest) 之前接受以下变量:

CXXTEST_TESTGEN_ARGS

此变量可以设置为一个分号分隔的命令行选项列表,用于传递给 CxxTest 代码生成器。如果未设置,则默认值为 --error-printer

命令

如果找到 CxxTest,此模块将提供以下命令:

cxxtest_add_test

创建一个 CxxTest 运行器并将其添加到 CTest 测试套件中。

cxxtest_add_test(<test-name> <gen-source-file> <input-files-to-testgen>...)

参数

<test-name>

要创建并注册为 CTest 套件中测试的测试可执行文件的名称。

<gen-source-file>

由 CxxTest 代码生成器生成的源文件的名称。这必须是相对路径。它相对于当前二进制目录(CMAKE_CURRENT_BINARY_DIR)进行解释。

<input-files-to-testgen>...

包含测试套件类(派生自 C++ 类 CxxTest::TestSuite)的头文件列表,这些类将被包含在测试运行器中。这些必须是绝对路径。

已弃用变量

以下变量提供用于向后兼容性

CXXTEST_FOUND

版本 4.2 中已弃用: 使用 CxxTest_FOUND,其值相同。

一个布尔值,指示是否找到 CxxTest 框架。

CXXTEST_USE_PYTHON

版本 2.8.3 中已弃用: 在 CMake 的早期版本中,此提示变量用于强制使用基于 Python 的测试生成器而不是基于 Perl 的生成器,无论安装了哪种脚本语言。它现在仅在找到 Perl 和 Python 解释器时才考虑。

一个布尔提示变量,当设置为 true 时,如果在找到 Perl 和 Python 解释器时,首选 Python 代码生成器而不是 Perl 代码生成器。此变量仅在使用 CxxTest 3 版本时相关。

示例

以下示例演示了在 CMake 中如何使用此模块的 CxxTest。如果找到 CxxTest,

  • 附加的接口导入的目标在项目中手动创建,以封装 CxxTest 的使用要求并将其链接到指定的测试。 such target is useful, for example, when dealing with multiple tests.

  • 调用测试生成器,以当前源目录中的输入头文件 foo_test.h 在当前二进制目录中创建 foo_test.cc

  • 一个名为 unit_test_foo 的可执行文件被构建并注册为 CTest 中的一个测试。

CMakeLists.txt
find_package(CxxTest)

# Create interface imported target:
if(CxxTest_FOUND AND NOT TARGET CxxTest::CxxTest)
  add_library(CxxTest::CxxTest INTERFACE IMPORTED)
  set_target_properties(
    CxxTest::CxxTest
    PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CXXTEST_INCLUDE_DIRS}"
  )
endif()

# Add test:
if(CxxTest_FOUND)
  enable_testing()

  cxxtest_add_test(
    unit_test_foo
    foo_test.cc
    ${CMAKE_CURRENT_SOURCE_DIR}/foo_test.h
  )

  target_link_libraries(
    unit_test_foo
    PRIVATE
      CxxTest::CxxTest
      # Link any project targets as needed, if test depends on them:
      foo
  )
endif()
foo_test.h
#include <cxxtest/TestSuite.h>

class MyTestSuite : public CxxTest::TestSuite
{
public:
  void testAddition(void)
  {
    TS_ASSERT(1 + 1 > 1);
    TS_ASSERT_EQUALS(1 + 1, 2);
  }
};