Как собрать проект C ++ с make, когда тесты не пройдены - PullRequest
0 голосов
/ 20 октября 2019

Я использую cmake для конфигурации сборки и gtests в качестве среды тестирования. В настоящее время make терпит неудачу, если тесты не выполняются и запускаются ctest или make test после успешной сборки, которая говорит "No tests were found!!!". Я хотел бы иметь возможность создавать проект, даже если некоторые тесты не выполняются, и запускать тесты с помощью команды ctest / make test

My CMakeLists.txt (тесты добавляются в конец файла):

    cmake_minimum_required(VERSION 3.10.0)
    project(ExampleProject VERSION 0.1.0)
    add_subdirectory("${PROJECT_SOURCE_DIR}/src/models")
    add_subdirectory("${PROJECT_SOURCE_DIR}/src/logic")
    add_subdirectory("${PROJECT_SOURCE_DIR}/src/executable")
    include(CTest)
    enable_testing()
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY build)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY build)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY build)
    set(CPACK_PROJECT_NAME ${PROJECT_NAME})
    set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
    include(CPack)


    ################################################
    # GOOGLE TEST
    ################################################
    # Download and unpack googletest at configure time
    configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
    execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
      RESULT_VARIABLE result
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
    if(result)
      message(FATAL_ERROR "CMake step for googletest failed: ${result}")
    endif()
    execute_process(COMMAND ${CMAKE_COMMAND} --build .
      RESULT_VARIABLE result
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
    if(result)
      message(FATAL_ERROR "Build step for googletest failed: ${result}")
    endif()

    # Prevent overriding the parent project's compiler/linker
    # settings on Windows
    set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

    # Add googletest directly to our build. This defines
    # the gtest and gtest_main targets.
    add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
                     ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
                     EXCLUDE_FROM_ALL)

    # The gtest/gtest_main targets carry header search path
    # dependencies automatically when using CMake 2.8.11 or
    # later. Otherwise we have to add them here ourselves.
    if (CMAKE_VERSION VERSION_LESS 2.8.11)
      include_directories("${gtest_SOURCE_DIR}/include")
    endif()

    # # Now simply link against gtest or gtest_main as needed. Eg
    # add_executable(example example.cpp)
    # target_link_libraries(example gtest_main)
    # add_test(NAME example_test COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/example)
    # ################################################
    include(GoogleTest)
    add_executable(example example.cpp)
    target_link_libraries(example gtest)
    gtest_discover_tests(example)

example.cpp:

    #include "gtest/gtest.h"
    using namespace std;
    int main()
    {
        testing::InitGoogleTest();
        auto a = RUN_ALL_TESTS();
        return a;
    }

    TEST(MYTEST,MYTEST1)
    {
    EXPECT_EQ(1,1);
    }

    TEST(MYTEST,MYTEST2)
    {
    EXPECT_EQ(2,2);
    }

    TEST(MYTEST3,MYTEST12)
    {
    EXPECT_EQ(1,1);
    }

    TEST(MYTEST4,MYTEST22)
    {
    EXPECT_EQ(2,122);
    }

сделать вывод:

make
[ 16%] Built target gtest
Scanning dependencies of target example
[ 25%] Building CXX object CMakeFiles/example.dir/example.cpp.o
[ 33%] Linking CXX executable build/example
CMake Error at /usr/share/cmake-3.10/Modules/GoogleTestAddTests.cmake:39 (message):
  Error running test executable.

    Path: '/PathToExampleProject/build/example'
    Result: 1
    Output:
      [==========] Running 4 tests from 3 test suites.
      [----------] Global test environment set-up.
      [----------] 2 tests from MYTEST
      [ RUN      ] MYTEST.MYTEST1
      [       OK ] MYTEST.MYTEST1 (0 ms)
      [ RUN      ] MYTEST.MYTEST2
      [       OK ] MYTEST.MYTEST2 (0 ms)
      [----------] 2 tests from MYTEST (0 ms total)

      [----------] 1 test from MYTEST3
      [ RUN      ] MYTEST3.MYTEST12
      [       OK ] MYTEST3.MYTEST12 (0 ms)
      [----------] 1 test from MYTEST3 (0 ms total)

      [----------] 1 test from MYTEST4
      [ RUN      ] MYTEST4.MYTEST22
      /PathToExampleProject/example.cpp:27: Failure
      Expected equality of these values:
        2
        122
      [  FAILED  ] MYTEST4.MYTEST22 (0 ms)
      [----------] 1 test from MYTEST4 (0 ms total)

      [----------] Global test environment tear-down
      [==========] 4 tests from 3 test suites ran. (0 ms total)
      [  PASSED  ] 3 tests.
      [  FAILED  ] 1 test, listed below:
      [  FAILED  ] MYTEST4.MYTEST22

       1 FAILED TEST




CMakeFiles/example.dir/build.make:95: recipe for target 'build/example' failed
make[2]: *** [build/example] Error 1
make[2]: *** Deleting file 'build/example'
CMakeFiles/Makefile2:867: recipe for target 'CMakeFiles/example.dir/all' failed
make[1]: *** [CMakeFiles/example.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...