如何在运行时在CTest中传递命令行参数

时间:2015-03-02 14:44:42

标签: command-line cmake ctest

我正在使用CTest并希望在运行时将命令行参数传递给基础测试。我知道有很多方法可以将命令行参数硬编码到CMake / CTest脚本中,但是我想在运行时指定命令行参数,并将这些参数通过CTest传递给基础测试。

这甚至可能吗?

3 个答案:

答案 0 :(得分:1)

我不确定我完全理解你想要什么,但我仍然可以给你一种方法在运行时将参数传递给CTest中的测试。

我将举例说明CTK(Common Toolkit,https://github.com/commontk/CTK):

在构建目录中(例如:CTK-build / CTK-build,它是一个超级构建),如果我运行:('-V'代表详细,' - '代表视图模式)

ctest -R ctkVTKDataSetArrayComboBoxTest1 -V -N

我明白了:

UpdateCTestConfiguration  from : /CTK-build/CTK-build/DartConfiguration.tcl
Parse Config file:/CTK-build/CTK-build/DartConfiguration.tcl
 Add coverage exclude regular expressions.
 Add coverage exclude: /CMakeFiles/CMakeTmp/
 Add coverage exclude: .*/moc_.*
 Add coverage exclude: .*/ui_.*
 Add coverage exclude: .*/Testing/.*
 Add coverage exclude: .*/CMakeExternals/.*
 Add coverage exclude: ./ctkPixmapIconEngine.*
 Add coverage exclude: ./ctkIconEngine.*
UpdateCTestConfiguration  from :/CTK-build/CTK-build/DartConfiguration.tcl
Parse Config file:/CTK-build/CTK-build/DartConfiguration.tcl
Test project /CTK-build/CTK-build
Constructing a list of tests
Done constructing a list of tests

178: Test command: /CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1"
Labels: CTKVisualizationVTKWidgets
  Test #178: ctkVTKDataSetArrayComboBoxTest1

Total Tests: 1

您可以在终端中复制粘贴“测试命令”:

/CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1"

并添加参数,例如“-I”用于交互式测试:

/CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1" "-I"

告诉我它是否有帮助。

答案 1 :(得分:1)

matthieu的回答给了我让它为我工作的线索。

对于我的代码,我做了以下内容:

输入命令... 488: Test command: path/to/ctest/executable/TestMembraneCellCrypt Labels: Continuous_project_ChasteMembrane Test #488: TestMembraneCellCrypt ... 以获取输出:

Test command

然后我复制了path/to/ctest/executable/TestMembraneCellCrypt -e 2 -em 5 -ct 10 并在那里提供了参数:

{{1}}

我会注意到我使用的程序包(Chaste)非常大,所以可能会发生一些我不知道的事情。

答案 2 :(得分:0)

我想出了一种方法(使用Fundamental theorem of software engineering)。这不是我想要的那么简单,但是就在这里。

首先,创建包含内容的文件 $ {CMAKE_SOURCE_DIR} /cmake/RunTests.cmake

INSERT

然后,当您添加测试时,使用

if(NOT DEFINED ENV{TESTS_ARGUMENTS})
    set(ENV{TESTS_ARGUMENTS} "--default-arguments")
endif()
execute_process(COMMAND ${TEST_EXECUTABLE} $ENV{TESTS_ARGUMENTS} RESULT_VARIABLE result)
if(NOT "${result}" STREQUAL "0")
    message(FATAL_ERROR "Test failed with return value '${result}'")
endif()

最后,您可以使用以下自定义参数运行测试

add_test(
    NAME MyTest
    COMMAND ${CMAKE_COMMAND} -DTEST_EXECUTABLE=$<TARGET_FILE:MyTest> -P ${CMAKE_SOURCE_DIR}/cmake/RunTests.cmake
)

请注意,如果您使用bash,可以将其简化为

cmake -E env TESTS_ARGUMENTS="--custom-arguments" ctest

此方法存在一些问题,例如它忽略测试的TESTS_ARGUMENTS="--custom-arguments" ctest 属性。当然,我希望它可以像调用WILL_FAIL一样简单,但是正如Stones所说的,You can't always get what you want