Cách bắt đầu làm việc với GTest và CMake


125

Gần đây tôi đã được bán về việc sử dụng CMake để biên dịch các dự án C ++ của mình và bây giờ tôi muốn bắt đầu viết một số bài kiểm tra đơn vị cho mã của mình. Tôi đã quyết định sử dụng tiện ích Kiểm tra của Google để trợ giúp việc này, nhưng cần một số trợ giúp để bắt đầu.

Cả ngày tôi đã đọc nhiều hướng dẫn và ví dụ khác nhau bao gồm Primer , phần giới thiệu tại IBM và một số câu hỏi về SO ( ở đâyở đây ) cũng như các nguồn khác mà tôi đã mất. Tôi nhận ra có rất nhiều thứ ngoài kia nhưng không hiểu sao tôi vẫn gặp khó khăn.

Tôi hiện đang cố gắng thực hiện thử nghiệm cơ bản nhất, để xác nhận rằng tôi đã biên dịch / cài đặt đúng gtest và nó không hoạt động. Các chỉ nguồn tập tin (testgtest.cpp) được thực hiện gần như chính xác từ này câu trả lời trước:

#include <iostream>

#include "gtest/gtest.h"

TEST(sample_test_case, sample_test)
{
    EXPECT_EQ(1, 1);
}

và CMakeLists.txt được liên kết của tôi như sau:

cmake_minimum_required(VERSION 2.6)
project(basic_test)

# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})

# Add test cpp file
add_executable(runUnitTests
    testgtest.cpp
)

# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})

add_test(
    NAME runUnitTests
    COMMAND runUnitTests
)

Lưu ý rằng tôi đã chọn liên kết chống lại gtest_main thay vì cung cấp chính ở cuối tệp cpp vì tôi tin rằng điều này sẽ cho phép tôi mở rộng quy mô thử nghiệm dễ dàng hơn với nhiều tệp.

Khi xây dựng tệp .sln được tạo (trong Visual C ++ 2010 Express), tôi không may nhận được một danh sách dài các lỗi của biểu mẫu

2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in gtestd.lib(gtest-all.obj)

mà tôi nghĩ có nghĩa là tôi không liên kết thành công đến các thư viện gtest. Tôi đã đảm bảo rằng khi liên kết chống lại các thư viện gỡ lỗi, sau đó tôi đã cố gắng xây dựng ở chế độ gỡ lỗi.

BIÊN TẬP

Sau khi đào thêm, tôi nghĩ vấn đề của tôi là liên quan đến loại thư viện mà tôi đang xây dựng gtest. Khi xây dựng gtest với CMake, nếu BUILD_SHARED_LIBSkhông được chọn và tôi liên kết chương trình của mình với các tệp .lib này, tôi gặp các lỗi được đề cập ở trên. Tuy nhiên, nếu BUILD_SHARED_LIBSđược chọn thì tôi tạo một tập hợp các tệp .lib và .dll. Khi bây giờ liên kết với các tệp .lib này, chương trình biên dịch, nhưng khi chạy thì phàn nàn rằng nó không thể tìm thấy gtest.dll.

Sự khác biệt giữa thư viện a SHAREDSHAREDthư viện không phải là gì , và nếu tôi chọn không được chia sẻ, tại sao nó không hoạt động? Có tùy chọn nào trong CMakeLists.txt cho dự án của tôi mà tôi đang thiếu không?


4
Bạn có thể tránh bao gồm các nguồn GTest của riêng mình bằng cách sử dụng ExternalProject_Addthay vì sử dụng add_subdirectory. Xem câu trả lời này để biết chi tiết.
Fraser

Tại sao chúng tôi có quyền truy cập vào $ {gtest_SOURCE_DIR} trong ví dụ giải pháp ở trên? Biến đó được khai báo như thế nào / ở đâu?
dmonopoly

Ồ, nó được khai báo trong gtest-1.6.0 / CMakeLists.txt: "project (gtest CXX C)", làm cho các biến gtest_SOURCE_DIR và gtest_BINARY_DIR có sẵn.
dmonopoly

1
Làm gì enable_testing()?
updogliu

1
@updogliu: Nó cho phép ctest và mục tiêu 'test' (hoặc 'RUN_TESTS'). Nó hoạt động cùng với lệnh add_test () cmake.
Ela782

Câu trả lời:


76

Giải pháp liên quan đến việc đặt thư mục nguồn gtest làm thư mục con của dự án của bạn. Tôi đã bao gồm CMakeLists.txt đang hoạt động bên dưới nếu nó hữu ích cho bất kỳ ai.

cmake_minimum_required(VERSION 2.6)
project(basic_test)

################################
# GTest
################################
ADD_SUBDIRECTORY (gtest-1.6.0)
enable_testing()
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})

################################
# Unit Tests
################################
# Add test cpp file
add_executable( runUnitTests testgtest.cpp )
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests gtest gtest_main)
add_test( runUnitTests runUnitTests )

3
Tôi không chắc add_test () làm gì, nhưng có vẻ như nó không dẫn đến việc chạy thử nghiệm nhị phân ... Tôi có thiếu thứ gì không?
weberc2

4
Không phải để đánh chết một con ngựa nhưng tôi nghĩ điều này lại đáng nói. Nhận xét của Fraser ở trên đưa ra một điểm rất quan trọng: "Bạn có thể tránh bao gồm các nguồn GTest của riêng mình bằng cách sử dụng ExternalProject_Add thay vì add_subdirectory." Xem câu trả lời và nhận xét của Fraser để biết chi tiết tại đây: stackoverflow.com/a/9695234/1735836
Patricia

1
Trong trường hợp của tôi, tôi cũng cần thiết để thêm pthreadvào các thư viện liên kết, thay đổi dòng cuối cùng thứ hai đểtarget_link_libraries(runUnitTests gtest gtest_main pthread)
panmari

3
@ weberc2 Bạn phải chạy make testđể chạy thử nghiệm hoặc chạy ctesttừ thư mục xây dựng. Chạy ctest -Vđể xem google test output cũng như ctestoutput.
Patrick

38

Đây là một ví dụ làm việc hoàn chỉnh mà tôi vừa thử nghiệm. Nó tải xuống trực tiếp từ web, một tarball cố định hoặc thư mục subversion mới nhất.

cmake_minimum_required (VERSION 3.1)

project (registerer)

##################################
# Download and install GoogleTest

include(ExternalProject)
ExternalProject_Add(gtest
  URL https://googletest.googlecode.com/files/gtest-1.7.0.zip
  # Comment above line, and uncomment line below to use subversion.
  # SVN_REPOSITORY http://googletest.googlecode.com/svn/trunk/ 
  # Uncomment line below to freeze a revision (here the one for 1.7.0)
  # SVN_REVISION -r700

  PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gtest
  INSTALL_COMMAND ""
)
ExternalProject_Get_Property(gtest source_dir binary_dir)

################
# Define a test
add_executable(registerer_test registerer_test.cc)

######################################
# Configure the test to use GoogleTest
#
# If used often, could be made a macro.

add_dependencies(registerer_test gtest)
include_directories(${source_dir}/include)
target_link_libraries(registerer_test ${binary_dir}/libgtest.a)
target_link_libraries(registerer_test ${binary_dir}/libgtest_main.a)

##################################
# Just make the test runnable with
#   $ make test

enable_testing()
add_test(NAME    registerer_test 
         COMMAND registerer_test)

7
Tôi không biết tại sao bạn lại bị bỏ phiếu vì điều này. Giải pháp của bạn ngăn không cho ai đó phải đăng ký Kiểm tra Google đối với kiểm soát phiên bản. Kudos cho giải pháp của bạn.
Sal

4
URL bạn sử dụng hiện đã bị hỏng. URL cập nhật làhttps://github.com/google/googletest/archive/release-1.8.0.zip
oscfri

Câu trả lời chính xác. Nên là số 1.
Mr00Anderson

1
tạo ra câu trả lời! chúng tôi cũng có thể sử dụng GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.8.1thay vì URL
TingQian LI

URL của bản phát hành mới nhất gtest là:https://github.com/google/googletest/archive/release-1.10.0.zip
vahancho

16

Bạn có thể nhận được những điều tốt nhất của cả hai thế giới. Có thể sử dụng ExternalProjectđể tải xuống mã nguồn gtest và sau đó sử dụng add_subdirectory()để thêm nó vào bản dựng của bạn. Điều này có những ưu điểm sau:

  • gtest được xây dựng như một phần của bản dựng chính của bạn, vì vậy nó sử dụng cùng các cờ trình biên dịch, v.v. và do đó tránh được các vấn đề như những vấn đề được mô tả trong câu hỏi.
  • Không cần thêm các nguồn gtest vào cây nguồn của riêng bạn.

Được sử dụng theo cách thông thường, ExternalProject sẽ không thực hiện tải xuống và giải nén tại thời điểm cấu hình (tức là khi CMake được chạy), nhưng bạn có thể làm cho nó thực hiện chỉ với một chút thao tác. Tôi đã viết một bài đăng trên blog về cách thực hiện điều này cũng bao gồm một triển khai tổng quát hoạt động cho bất kỳ dự án bên ngoài nào sử dụng CMake làm hệ thống xây dựng của nó, không chỉ gtest. Bạn có thể tìm họ ở đây:

Cập nhật: Cách tiếp cận này hiện cũng là một phần của tài liệu googletest .


2
IMO, đây có lẽ là cách sạch sẽ nhất để thực hiện thử nghiệm của Google với một dự án CMake. Tôi mong muốn những người điều hành sẽ quan tâm hơn đến nội dung và chất lượng của các câu trả lời.
NameRakes

Mô-đun tổng quát DownloadProject.cmake được liên kết là rất tốt. Nó giống như cơ sở để cmake có một hệ thống quản lý gói, nơi tất cả những gì tôi cần là danh sách các liên kết đến các url github tương thích với CMake.
Josh Peak

13

Rất có thể, sự khác biệt trong các tùy chọn trình biên dịch giữa tệp nhị phân thử nghiệm của bạn và thư viện Kiểm tra của Google là nguyên nhân cho các lỗi như vậy. Đó là lý do tại sao bạn nên đưa Google Test ở dạng nguồn và xây dựng nó cùng với các bài kiểm tra của bạn. Nó rất dễ thực hiện trong CMake. Bạn chỉ cần gọi ADD_SUBDIRECTORYvới đường dẫn đến gốc gtest và sau đó bạn có thể sử dụng các mục tiêu thư viện công cộng ( gtestgtest_main) được xác định ở đó. Có nhiều thông tin cơ bản hơn trong chuỗi CMake này trong nhóm googletestframework.

[sửa] BUILD_SHARED_LIBSTùy chọn này hiện chỉ có hiệu lực trên Windows. Nó chỉ định loại thư viện mà bạn muốn CMake xây dựng. Nếu bạn đặt nó thành ON, CMake sẽ xây dựng chúng dưới dạng DLL thay vì lib tĩnh. Trong trường hợp đó, bạn phải xây dựng các bài kiểm tra của mình với -DGTEST_LINKED_AS_SHARED_LIBRARY = 1 và sao chép các tệp DLL do CMake tạo ra vào thư mục có tệp nhị phân kiểm tra của bạn (CMake đặt chúng trong một thư mục đầu ra riêng theo mặc định). Trừ khi gtest trong static lib không phù hợp với bạn, nếu không bạn không đặt tùy chọn đó sẽ dễ dàng hơn.


1
Rất cảm ơn, không nhận ra rằng bạn có thể xây dựng các dự án hoàn toàn riêng biệt trong cùng một CMakeLists như vậy. Bây giờ tôi có thể nói một cách an toàn rằng EXPECT_EQ (1,0 == 1,0) vượt qua và EXPECT_EQ (0,0 == 1,0) không thành công. Bây giờ là lúc để kiểm tra thực tế hơn ...
Chris

2

Sau khi đào thêm, tôi nghĩ vấn đề của tôi là liên quan đến loại thư viện mà tôi đang xây dựng gtest. Khi xây dựng gtest với CMake, nếu BUILD_SHARED_LIBS không được chọn và tôi liên kết chương trình của mình với các tệp .lib này, tôi gặp các lỗi được đề cập ở trên. Tuy nhiên, nếu BUILD_SHARED_LIBS được chọn thì tôi sẽ tạo một tập hợp các tệp .lib và .dll. Khi bây giờ liên kết với các tệp .lib này, chương trình biên dịch, nhưng khi chạy thì phàn nàn rằng nó không thể tìm thấy gtest.dll.

Đó là vì bạn phải thêm -DGTEST_LINKED_AS_SHARED_LIBRARY = 1 vào các định nghĩa của trình biên dịch trong dự án của mình nếu bạn muốn sử dụng gtest làm thư viện chia sẻ.

Bạn cũng có thể sử dụng các thư viện tĩnh, miễn là bạn đã biên dịch nó với tùy chọn gtest_force_shared_crt để loại bỏ các lỗi bạn đã thấy.

Tôi thích thư viện nhưng thêm nó vào dự án là một nỗi đau thực sự. Và bạn không có cơ hội để làm điều đó đúng trừ khi bạn đào (và hack) vào các tệp cmake gtest. Xấu hổ. Đặc biệt tôi không thích ý tưởng thêm gtest làm nguồn. :)


1

OP đang sử dụng Windows và một cách dễ dàng hơn nhiều để sử dụng GTest ngày nay là vcpkg + cmake.


Cài đặt vcpkg theo https://github.com/microsoft/vcpkg và đảm bảo rằng bạn có thể chạy vcpkgtừ dòng cmd. Lưu ý đến thư mục cài đặt vcpkg, ví dụ. C:\bin\programs\vcpkg.

Cài đặt gtest bằng cách sử dụng vcpkg install gtest: điều này sẽ tải xuống, biên dịch và cài đặt GTest.

Sử dụng CmakeLists.txt như bên dưới: lưu ý rằng chúng ta có thể sử dụng target thay vì bao gồm các thư mục.

cmake_minimum_required(VERSION 3.15)
project(sample CXX)
enable_testing()
find_package(GTest REQUIRED)
add_executable(test1 test.cpp source.cpp)
target_link_libraries(test1 GTest::GTest GTest::Main)
add_test(test-1 test1)

Chạy cmake với: (chỉnh sửa thư mục vcpkg nếu cần và đảm bảo đường dẫn đến tệp vcpkg.cmake toolchain là chính xác)

cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:\bin\programs\vcpkg\scripts\buildsystems\vcpkg.cmake

và xây dựng bằng cách sử dụng cmake --build buildnhư bình thường. Lưu ý rằng, vcpkg cũng sẽ sao chép gtest (d) .dll / gtest (d) _main.dll cần thiết từ thư mục cài đặt vào thư mục Gỡ lỗi / Phát hành.

Thử nghiệm với cd build & ctest.


0

Giải pháp của bạn và của VladLosevs có lẽ tốt hơn của tôi. Tuy nhiên, nếu bạn muốn có một giải pháp vũ phu, hãy thử cách này:

SET(CMAKE_EXE_LINKER_FLAGS /NODEFAULTLIB:\"msvcprtd.lib;MSVCRTD.lib\")

FOREACH(flag_var
    CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
    CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
    if(${flag_var} MATCHES "/MD")
        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
    endif(${flag_var} MATCHES "/MD")
ENDFOREACH(flag_var)

0

CMakeLists.txt đơn giản nhất mà tôi đã chắt lọc từ các câu trả lời trong chủ đề này và một số thử nghiệm và lỗi là:

project(test CXX C)
cmake_minimum_required(VERSION 2.6.2)

#include folder contains current project's header filed
include_directories("include")

#test folder contains test files
set (PROJECT_SOURCE_DIR test) 
add_executable(hex2base64 ${PROJECT_SOURCE_DIR}/hex2base64.cpp)

# Link test executable against gtest nothing else required
target_link_libraries(hex2base64 gtest pthread)

Gtest đã được cài đặt trên hệ thống của bạn.


Thực sự không phải là một phương pháp hay để thêm thư viện như thế này trong CMake. Một trong những mục tiêu chính của cmake là không bao giờ phải đưa ra giả định như "Đã cài đặt lib này rồi ...". CMake kiểm tra xem thư viện có ở đây không, và nếu không, một lỗi sẽ xảy ra.
Adrien BARRAL

0

Chỉ là cập nhật cho nhận xét của @ Patricia trong câu trả lời được chấp nhận và nhận xét của @ Fraser cho câu hỏi ban đầu, nếu bạn có quyền truy cập vào CMake 3.11+, bạn có thể sử dụng chức năng FetchContent của CMake .

Trang FetchContent của CMake sử dụng googletest làm ví dụ!

Tôi đã cung cấp một sửa đổi nhỏ cho câu trả lời được chấp nhận:

cmake_minimum_required(VERSION 3.11)
project(basic_test)

set(GTEST_VERSION 1.6.0 CACHE STRING "Google test version")

################################
# GTest
################################
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-${GTEST_VERSION})

FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
  FetchContent_Populate(googletest)
  add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
endif()

enable_testing()

################################
# Unit Tests
################################
# Add test cpp file
add_executable(runUnitTests testgtest.cpp)

# Include directories
target_include_directories(runUnitTests 
                      $<TARGET_PROPERTY:gtest,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
                      $<TARGET_PROPERTY:gtest_main,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>)

# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests gtest
                                   gtest_main)

add_test(runUnitTests runUnitTests)

Bạn có thể sử dụng thuộc tính INTERFACE_SYSTEM_INCLUDE_DIRECTORIESđích của mục tiêu gtest và gtest_main khi chúng được đặt trong tập lệnh CMakeLists.txt kiểm tra của google .


Trong CMake> = v3.14, bạn có thể loại bỏ sự rõ ràng target_include_directoriesvà sử dụng FetchContent_MakeAvailable(googletest)thay thế. Điều này sẽ vừa điền nội dung vừa thêm nó vào bản dựng chính. CMake FetchContent - thêm thông tin
67hz

0

Tôi quyết định đưa một cái gì đó chung chung vào với nhau, thể hiện một cách thực sự nhanh chóng khác với những câu trả lời đã đăng trước đây, với hy vọng rằng nó có thể giúp ích cho ai đó. Điều sau đã làm việc cho tôi trên máy mac của tôi. Đầu tiên, tôi chạy các lệnh thiết lập cho gtests. Tôi chỉ sử dụng một tập lệnh mà tôi tìm thấy để thiết lập mọi thứ.

#!/usr/bin/env bash

# install gtests script on mac
# https://gist.github.com/butuzov/e7df782c31171f9563057871d0ae444a

#usage
# chmod +x ./gtest_installer.sh
# sudo ./gtest_installer.sh

# Current directory
__THIS_DIR=$(pwd)


# Downloads the 1.8.0 to disc
function dl {
    printf "\n  Downloading Google Test Archive\n\n"
    curl -LO https://github.com/google/googletest/archive/release-1.8.0.tar.gz
    tar xf release-1.8.0.tar.gz
}

# Unpack and Build
function build {
    printf "\n  Building GTest and Gmock\n\n"
    cd googletest-release-1.8.0
    mkdir build 
    cd $_
    cmake -Dgtest_build_samples=OFF -Dgtest_build_tests=OFF ../
    make
}

# Install header files and library
function install {
    printf "\n  Installing GTest and Gmock\n\n"

    USR_LOCAL_INC="/usr/local/include"
    GTEST_DIR="/usr/local/Cellar/gtest/"
    GMOCK_DIR="/usr/local/Cellar/gmock/"

    mkdir $GTEST_DIR

    cp googlemock/gtest/*.a $GTEST_DIR
    cp -r ../googletest/include/gtest/  $GTEST_DIR
    ln -snf $GTEST_DIR $USR_LOCAL_INC/gtest
    ln -snf $USR_LOCAL_INC/gtest/libgtest.a /usr/local/lib/libgtest.a
    ln -snf $USR_LOCAL_INC/gtest/libgtest_main.a /usr/local/lib/libgtest_main.a

    mkdir $GMOCK_DIR
    cp googlemock/*.a   $GMOCK_DIR
    cp -r ../googlemock/include/gmock/  $GMOCK_DIR
    ln -snf $GMOCK_DIR $USR_LOCAL_INC/gmock
    ln -snf $USR_LOCAL_INC/gmock/libgmock.a /usr/local/lib/libgmock.a
    ln -snf $USR_LOCAL_INC/gmock/libgmock_main.a /usr/local/lib/libgmock_main.a
}

# Final Clean up.
function cleanup {
    printf "\n  Running Cleanup\n\n"

    cd $__THIS_DIR
    rm -rf $(pwd)/googletest-release-1.8.0
    unlink $(pwd)/release-1.8.0.tar.gz
}

dl && build && install && cleanup 

Tiếp theo, tôi tạo một cấu trúc thư mục đơn giản và viết một số lớp nhanh

utils/
  cStringUtils.cpp
  cStringUtils.h
  CMakeLists.txt
utils/tests/
    gtestsMain.cpp
    cStringUtilsTest.cpp
    CMakeLists.txt

Tôi đã tạo CMakeLists.txt cấp cao nhất cho thư mục utils và CMakeLists.txt cho thư mục tests

cmake_minimum_required(VERSION 2.6)

project(${GTEST_PROJECT} C CXX)

set(CMAKE_C_STANDARD 98)
set(CMAKE_CXX_STANDARD 98)

#include .h and .cpp files in util folder
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")

##########
# GTests
#########
add_subdirectory(tests)

Đây là CMakeLists.txt trong thư mục tests

cmake_minimum_required(VERSION 2.6)

set(GTEST_PROJECT gtestProject)

enable_testing()

message("Gtest Cmake")

find_package(GTest REQUIRED)

# The utils, test, and gtests directories
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
include_directories("/usr/local/Cellar/gtest/include")
include_directories("/usr/local/Cellar/gtest/lib")

set(SOURCES
  gtestsMain.cpp
  ../cStringUtils.cpp
  cStringUtilsTest.cpp
)

set(HEADERS
  ../cStringUtils.h
)

add_executable(${GTEST_PROJECT} ${SOURCES})
target_link_libraries(${GTEST_PROJECT} PUBLIC
  gtest
  gtest_main
)

add_test(${GTEST_PROJECT} ${GTEST_PROJECT})

Sau đó, tất cả những gì còn lại là viết một gtest mẫu và gtest chính

gtest mẫu

#include "gtest/gtest.h"
#include "cStringUtils.h"

namespace utils
{

class cStringUtilsTest : public ::testing::Test {

 public:

  cStringUtilsTest() : m_function_param(10) {}
  ~cStringUtilsTest(){}

 protected:
  virtual void SetUp() 
  {
    // declare pointer 
    pFooObject = new StringUtilsC();    
  }

  virtual void TearDown() 
  {
    // Code here will be called immediately after each test
    // (right before the destructor).
    if (pFooObject != NULL)
    {
      delete pFooObject;
      pFooObject = NULL;
    }
  }


  StringUtilsC fooObject;              // declare object
  StringUtilsC *pFooObject;
  int m_function_param;                // this value is used to test constructor
};

TEST_F(cStringUtilsTest, testConstructors){
    EXPECT_TRUE(1);

  StringUtilsC fooObject2 = fooObject; // use copy constructor


  fooObject.fooFunction(m_function_param);
  pFooObject->fooFunction(m_function_param);
  fooObject2.fooFunction(m_function_param);
}

} // utils end

mẫu gtest chính

#include "gtest/gtest.h"
#include "cStringUtils.h"

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv); 
  return RUN_ALL_TESTS();
}

Sau đó, tôi có thể biên dịch và chạy gtests với các lệnh sau từ thư mục utils

cmake .
make 
./tests/gtestProject
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.