[英]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
在工具>選項> 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.