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);
}
};