2014-10-14 2 views
3

이상하게도 테스트를 빌드하고 실행하면 정의 된 모든 테스트 (부스트의 BOOST_AUTO_TEST_CASE())가 각 cmake 정의 테스트 (cmake의 add_test())에서 실행됩니다. 나는 내가 구성에서 뭔가 잘못한 것이 틀림 없다고 확신하지만, 나 자신의 삶은 그것이 무엇인지 알아낼 수 없다.cmake test : 모든 테스트가 각 ctest에서 실행됩니다.

루트 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" 

각 'test_NAME.hpp'는 다음과 유사한 테스트를 포함 이 :

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

답변

4

add_test command은 예상했던대로 똑똑하지 않습니다. 특히 특정 테스트 집합 만 실행하도록 테스트 실행 파일을 구성하는 방법에 대해서는 아무 것도 모릅니다.

지금 CMake에게 말한 것은 기본적으로 projectTest 번에있는 테스트의 전체 집합을 다른 이름으로 6 번 실행했습니다. 이 문제를 해결할 수있는 두 가지 옵션이 있습니다.

올바른 테스트 만 실행하도록 테스트 명령을 제한하십시오. 부스트 시험의 경우, 이것은 -t command line parameter 쉽게 수행 할 수 있습니다 그대로

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) 

내가 개인적으로 두 번째 방법을 선호 :

add_test(NAME hash_structors COMMAND projectTest -t */hash_structors) 

다른 옵션은 소스 레벨에서 테스트를 분할하는 것입니다 다른 구성 요소에 너무 많은 종속성이있는 큰 단위 테스트를 작성하는 데보다 구조화되고 덜 유혹적입니다. 그러나 그것은 단지 개인적인 취향입니다.

+0

감사합니다. 제대로 작동합니다. 그러나'projectTest -t hash_structors' ('* /'없이)를 써야했습니다. – alex

관련 문제