奇怪的是,当我构建测试并运行它们时,我定义的每个测试(提升BOOST_AUTO_TEST_CASE()
)将在每个cmake定义的测试上运行(cmake' s add_test()
) 。我很确定我在配置上做错了但我不能为我的生活弄清楚它是什么。
root CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project("project")
-- some library findings and other configs --
enable_testing()
subdirs(test)
subdirs(src)
测试CMakeLists.txt:
add_test(NAME hash_structors COMMAND projectTest)
add_test(NAME hash_makeHash COMMAND projectTest)
add_test(NAME hash_tree_size_compare COMMAND projectTest)
add_test(NAME hash_tree_size_compare_random COMMAND projectTest)
add_test(NAME hash_tree_compare COMMAND projectTest)
add_test(NAME directory_manual COMMAND projectTest)
include_directories(../include)
add_executable(projectTest testMain.cpp
../src/hash.cpp
../src/hash_tree.cpp
../src/directory.cpp)
target_link_libraries(projectTest ${Boost_LIBRARIES}
${CRYPTO++_LIBRARIES})
testMain.cpp:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "project tests"
#include <boost/test/unit_test.hpp>
#include "test_hash.hpp"
#include "test_hash_tree.hpp"
#include "test_directory.hpp"
每个&#39; test_NAME.hpp&#39;然后包含类似于此的测试:
#include "hash.hpp"
BOOST_AUTO_TEST_CASE(hash_structors)
{
Hash hash;
BOOST_CHECK_EQUAL("", hash.getHash());
}
BOOST_AUTO_TEST_CASE(hash_makeHash)
{
Hash hash = Hash("test");
BOOST_TEST_MESSAGE(hash.getHash());
// precomputed hash value for "test"
BOOST_CHECK_EQUAL("7ab383fc29d81f8d0d68e87c69bae5f1f18266d730c48b1d", hash.getHash());
}
答案 0 :(得分:4)
add_test
command并不像你想象的那么聪明。特别是,它对如何将测试可执行文件配置为仅执行某组测试一无所知。
你所说的CMake现在基本上以不同的名字在projectTest
中运行了6次全套测试。您有两种方法可以解决此问题。
将测试命令限制为仅执行正确的测试。对于Boost测试,可以使用-t
command line parameter:
add_test(NAME hash_structors COMMAND projectTest -t */hash_structors)
另一种选择是在源级别拆分测试:
add_executable(TestHash testHash.cpp ../src/hash.cpp)
add_test(NAME hash_tests COMMAND TestHash)
add_executable(TestHashTree testHashTree.cpp ../src/hash_tree.cpp)
add_test(NAME hashtree_tests COMMAND TestHashTree)
我个人更喜欢第二种方法,因为它更具结构性,并且不那么诱人地编写对不同组件具有太多依赖性的大型单元测试。但这只是个人偏好。