GoogleTest - Google Testing and Mocking Framework (grpc protobuff依赖)
https://google.github.io/googletest/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
5.0 KiB
157 lines
5.0 KiB
# Quickstart: Building with CMake |
|
|
|
This tutorial aims to get you up and running with GoogleTest using CMake. If |
|
you're using GoogleTest for the first time or need a refresher, we recommend |
|
this tutorial as a starting point. If your project uses Bazel, see the |
|
[Quickstart for Bazel](quickstart-bazel.md) instead. |
|
|
|
## Prerequisites |
|
|
|
To complete this tutorial, you'll need: |
|
|
|
* A compatible operating system (e.g. Linux, macOS, Windows). |
|
* A compatible C++ compiler that supports at least C++14. |
|
* [CMake](https://cmake.org/) and a compatible build tool for building the |
|
project. |
|
* Compatible build tools include |
|
[Make](https://www.gnu.org/software/make/), |
|
[Ninja](https://ninja-build.org/), and others - see |
|
[CMake Generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) |
|
for more information. |
|
|
|
See [Supported Platforms](platforms.md) for more information about platforms |
|
compatible with GoogleTest. |
|
|
|
If you don't already have CMake installed, see the |
|
[CMake installation guide](https://cmake.org/install). |
|
|
|
{: .callout .note} |
|
Note: The terminal commands in this tutorial show a Unix shell prompt, but the |
|
commands work on the Windows command line as well. |
|
|
|
## Set up a project |
|
|
|
CMake uses a file named `CMakeLists.txt` to configure the build system for a |
|
project. You'll use this file to set up your project and declare a dependency on |
|
GoogleTest. |
|
|
|
First, create a directory for your project: |
|
|
|
``` |
|
$ mkdir my_project && cd my_project |
|
``` |
|
|
|
Next, you'll create the `CMakeLists.txt` file and declare a dependency on |
|
GoogleTest. There are many ways to express dependencies in the CMake ecosystem; |
|
in this quickstart, you'll use the |
|
[`FetchContent` CMake module](https://cmake.org/cmake/help/latest/module/FetchContent.html). |
|
To do this, in your project directory (`my_project`), create a file named |
|
`CMakeLists.txt` with the following contents: |
|
|
|
```cmake |
|
cmake_minimum_required(VERSION 3.14) |
|
project(my_project) |
|
|
|
# GoogleTest requires at least C++14 |
|
set(CMAKE_CXX_STANDARD 14) |
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
|
|
|
include(FetchContent) |
|
FetchContent_Declare( |
|
googletest |
|
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip |
|
) |
|
# For Windows: Prevent overriding the parent project's compiler/linker settings |
|
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) |
|
FetchContent_MakeAvailable(googletest) |
|
``` |
|
|
|
The above configuration declares a dependency on GoogleTest which is downloaded |
|
from GitHub. In the above example, `03597a01ee50ed33e9dfd640b249b4be3799d395` is |
|
the Git commit hash of the GoogleTest version to use; we recommend updating the |
|
hash often to point to the latest version. |
|
|
|
For more information about how to create `CMakeLists.txt` files, see the |
|
[CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html). |
|
|
|
## Create and run a binary |
|
|
|
With GoogleTest declared as a dependency, you can use GoogleTest code within |
|
your own project. |
|
|
|
As an example, create a file named `hello_test.cc` in your `my_project` |
|
directory with the following contents: |
|
|
|
```cpp |
|
#include <gtest/gtest.h> |
|
|
|
// Demonstrate some basic assertions. |
|
TEST(HelloTest, BasicAssertions) { |
|
// Expect two strings not to be equal. |
|
EXPECT_STRNE("hello", "world"); |
|
// Expect equality. |
|
EXPECT_EQ(7 * 6, 42); |
|
} |
|
``` |
|
|
|
GoogleTest provides [assertions](primer.md#assertions) that you use to test the |
|
behavior of your code. The above sample includes the main GoogleTest header file |
|
and demonstrates some basic assertions. |
|
|
|
To build the code, add the following to the end of your `CMakeLists.txt` file: |
|
|
|
```cmake |
|
enable_testing() |
|
|
|
add_executable( |
|
hello_test |
|
hello_test.cc |
|
) |
|
target_link_libraries( |
|
hello_test |
|
GTest::gtest_main |
|
) |
|
|
|
include(GoogleTest) |
|
gtest_discover_tests(hello_test) |
|
``` |
|
|
|
The above configuration enables testing in CMake, declares the C++ test binary |
|
you want to build (`hello_test`), and links it to GoogleTest (`gtest_main`). The |
|
last two lines enable CMake's test runner to discover the tests included in the |
|
binary, using the |
|
[`GoogleTest` CMake module](https://cmake.org/cmake/help/git-stage/module/GoogleTest.html). |
|
|
|
Now you can build and run your test: |
|
|
|
<pre> |
|
<strong>my_project$ cmake -S . -B build</strong> |
|
-- The C compiler identification is GNU 10.2.1 |
|
-- The CXX compiler identification is GNU 10.2.1 |
|
... |
|
-- Build files have been written to: .../my_project/build |
|
|
|
<strong>my_project$ cmake --build build</strong> |
|
Scanning dependencies of target gtest |
|
... |
|
[100%] Built target gmock_main |
|
|
|
<strong>my_project$ cd build && ctest</strong> |
|
Test project .../my_project/build |
|
Start 1: HelloTest.BasicAssertions |
|
1/1 Test #1: HelloTest.BasicAssertions ........ Passed 0.00 sec |
|
|
|
100% tests passed, 0 tests failed out of 1 |
|
|
|
Total Test time (real) = 0.01 sec |
|
</pre> |
|
|
|
Congratulations! You've successfully built and run a test binary using |
|
GoogleTest. |
|
|
|
## Next steps |
|
|
|
* [Check out the Primer](primer.md) to start learning how to write simple |
|
tests. |
|
* [See the code samples](samples.md) for more examples showing how to use a |
|
variety of GoogleTest features.
|
|
|