CTest:如何全局设置WORKING_DIRECTORY?
CTest: How to set WORKING_DIRECTORY globally?
最近,我一直在用 CTest 构建一个简单的测试套件。在最简单的形式中,它看起来像这样:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
add_test(NAME test_0
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-0)
add_test(NAME test_1
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-1)
add_test(NAME test_2
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-2)
然而,随着它的增长,我很快就厌倦了每次测试都必须重复 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
。
问题:有没有办法全局设置WORKING_DIRECTORY
(或者,更好的是,在每个测试子目录中本地设置)?像
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
set(DEFAULT_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_test(NAME test_0
COMMAND script.sh arg-0)
add_test(NAME test_1
COMMAND script.sh arg-1)
add_test(NAME test_2
COMMAND script.sh arg-2)
到目前为止最接近解决方案的是我亲爱的同事的建议,即定义一个测试生成函数:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
function(add_my_test TEST_NAME TEST_COMMAND TEST_ARGUMENTS)
add_test(NAME ${TEST_NAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${TEST_COMMAND} ${TEST_ARGUMENTS})
endfunction()
add_my_test(test_0 script.sh arg-0)
add_my_test(test_1 script.sh arg-1)
add_my_test(test_2 script.sh arg-2)
这很好用,但感觉没必要level of indirection。
最后,我选择了使用fixture将必要的部分复制到构建文件夹中,在那里测试并再次清理;这可能是一个更干净、更惯用的解决方案。尽管如此,出于好奇,我仍然对原始问题的解决方案感兴趣。
Is there a way to set WORKING_DIRECTORY globally
没有。 add_test 的默认 WORKING_DIRECTORY 在文档中指定。
This works fine
做吧。我会这样做:
macro(add_my_test)
add_test(
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
${ARGV}
)
endmacro()
add_my_test(
NAME test_1
COMMAND script.sh arg-1
)
您也可以推出自己的功能 ,但我相信只有一个包装函数就很棒而且很干净。
最近,我一直在用 CTest 构建一个简单的测试套件。在最简单的形式中,它看起来像这样:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
add_test(NAME test_0
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-0)
add_test(NAME test_1
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-1)
add_test(NAME test_2
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND script.sh arg-2)
然而,随着它的增长,我很快就厌倦了每次测试都必须重复 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
。
问题:有没有办法全局设置WORKING_DIRECTORY
(或者,更好的是,在每个测试子目录中本地设置)?像
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
set(DEFAULT_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_test(NAME test_0
COMMAND script.sh arg-0)
add_test(NAME test_1
COMMAND script.sh arg-1)
add_test(NAME test_2
COMMAND script.sh arg-2)
到目前为止最接近解决方案的是我亲爱的同事的建议,即定义一个测试生成函数:
cmake_minimum_required(VERSION 3.7)
project(testsuite)
enable_testing()
function(add_my_test TEST_NAME TEST_COMMAND TEST_ARGUMENTS)
add_test(NAME ${TEST_NAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${TEST_COMMAND} ${TEST_ARGUMENTS})
endfunction()
add_my_test(test_0 script.sh arg-0)
add_my_test(test_1 script.sh arg-1)
add_my_test(test_2 script.sh arg-2)
这很好用,但感觉没必要level of indirection。
最后,我选择了使用fixture将必要的部分复制到构建文件夹中,在那里测试并再次清理;这可能是一个更干净、更惯用的解决方案。尽管如此,出于好奇,我仍然对原始问题的解决方案感兴趣。
Is there a way to set WORKING_DIRECTORY globally
没有。 add_test 的默认 WORKING_DIRECTORY 在文档中指定。
This works fine
做吧。我会这样做:
macro(add_my_test)
add_test(
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
${ARGV}
)
endmacro()
add_my_test(
NAME test_1
COMMAND script.sh arg-1
)
您也可以推出自己的功能