簡體   English   中英

CMake 文件,用於集成 Visual Studio 單元測試

[英]CMake file for integrated Visual Studio unit testing

Visual Studio 2017 已集成 C++ 單元測試(native、google test、ctest 等)。 如何創建一個 CMakeLists.txt 文件來創建這樣的項目,該項目將使用集成的 IDE 測試,例如使用谷歌測試或本機微軟單元測試框架? 不幸的是,Microsoft 的所有示例都只是在 Visual Studio 中創建項目,而不是從 CMake 文件開始。

任何幫助表示贊賞,謝謝!

Mikewho,

我使用與集成IDE測試一起使用的Google Test項目設置了一個小示例。

創建一個空目錄並保存以下兩個文件:

的CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(test_me)

# GTest
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

# Unit Tests
# Add test cpp file
add_executable( runUnitTests tests.cpp)
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_BOTH_LIBRARIES})
add_test( runUnitTests runUnitTests )

tests.cpp

#include <gtest/gtest.h>

TEST(ABC, TEST1) {
  EXPECT_EQ(true, true);
}

在命令提示符下輸入

mkdir build
cd build
cmake .. "-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"

注意:我有vcpkg install gtest

C:\dev\vcpkg>vcpkg.exe install gtest

確保您已在Visual Studio 2017中安裝此程序
在此處輸入圖片說明

在工具>選項> Google Test的測試適配器中,將正則表達式設置為.exe
在此處輸入圖片說明

生成解決方案,然后在“測試資源管理器”中按“全部運行”
在此處輸入圖片說明

第一次運行它將找到測試用例

[12/3/2018 8:38:41 AM Informational] ------ Run test started ------
[12/3/2018 8:38:42 AM Warning] Could not locate debug symbols for 'C:\dev\cpptests\GoogleTest\build\Debug\runUnitTests.exe'. To make use of '--list_content' discovery, ensure that debug symbols are available or make use of '<ForceListContent>' via a .runsettings file.
[12/3/2018 8:38:42 AM Informational] Test Adapter for Google Test: Test execution starting...
**[12/3/2018 8:38:42 AM Informational] Found 1 tests in executable** C:\dev\cpptests\GoogleTest\build\Debug\runUnitTests.exe
[12/3/2018 8:38:42 AM Informational] Running 1 tests...
[12/3/2018 8:38:42 AM Informational] Google Test execution completed, overall duration: 00:00:00.2390446
[12/3/2018 8:38:42 AM Informational] ========== Run test finished: 1 run (0:00:01.2668844) ==========

我希望這有幫助?

雖然這是遲到的回復,但它是任何參考的最新答案。

對於Microsoft Unit Testing Framework ,以下簡化文件適用於我:

CMakeLists.txt

add_library(${UNIT_TEST_TARGET_NAME} SHARED)
target_sources(${UNIT_TEST_TARGET_NAME} PRIVATE 
    tests.cpp
    tests.h
)
target_link_libraries(${UNIT_TEST_TARGET_NAME} 
    PRIVATE MSUnitTestFramework::MSUnitTestFramework)
enable_testing()
find_program(VSTest_EXECUTABLE NAME vstest.console.exe REQUIRED)
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
find_package(MSUnitTestFramework REQUIRED)
add_test(NAME ${UNIT_TEST_TARGET_NAME} 
    COMMAND "${VSTest_EXECUTABLE}" "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${UNIT_TEST_TARGET_NAME}.dll"
)

/cmake/FindMSUnitTestFramework.cmake

add_library(MSUnitTestFramework::MSUnitTestFramework SHARED IMPORTED)
set_target_properties(MSUnitTestFramework::MSUnitTestFramework PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES "$ENV{VCInstallDir}Auxiliary/VS/UnitTest/include"
  IMPORTED_IMPLIB "$ENV{VCInstallDir}Auxiliary/VS/UnitTest/lib/x86/Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib"
)
set(MSUnitTestFramework_FOUND TRUE)

tests.cpp

#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace my_unit_test
{
    TEST_CLASS(my_tests)
    {
    public:
        TEST_METHOD(test1)
.
.

您可以從 MSVC Run All Tests等。

順便說一句,您可以使用它來逐個添加測試,而不是整個add_test的 add_test。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM