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



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

这可能吗?

我已经找到了一种方法(使用软件工程的基本定理)。这并不像我想的那么简单,但它就在这里。

首先,创建一个文件${CMAKE_SOURCE_DIR}/CMAKE/RunTests.CMAKE,内容为

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
)

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

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

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

TESTS_ARGUMENTS="--custom-arguments" ctest

这种方法存在一些问题,例如它忽略了测试的WILL_FAIL属性。当然,我希望它能像呼叫ctest -- --custom-arguments一样简单,但正如斯通夫妇所说,你不可能总是得到你想要的。

我不确定我是否完全理解您想要什么,但我仍然可以在运行时为您提供一种在CTest中向测试传递参数的方法。

我将给您举一个CTK(CommonToolkit,https://github.com/commontk/CTK):

在构建目录(例如:CTK构建/CTK构建,它是一个超级构建)中,如果我运行:("-V"表示Verbose,"-N"仅表示View Mode)

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"

告诉我它是否有用。

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

对于我的代码,我做了以下操作:

键入命令ctest -V -R TestMembraneCellCrypt -N以获得输出:

...
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

我要注意的是,我使用的软件包(Chaste)非常大,所以可能会有我不知道的事情发生。

相关内容

  • 没有找到相关文章

最新更新