1*481dde66SAndroid Build Coastguard Worker# Quickstart: Building with Bazel 2*481dde66SAndroid Build Coastguard Worker 3*481dde66SAndroid Build Coastguard WorkerThis tutorial aims to get you up and running with GoogleTest using the Bazel 4*481dde66SAndroid Build Coastguard Workerbuild system. If you're using GoogleTest for the first time or need a refresher, 5*481dde66SAndroid Build Coastguard Workerwe recommend this tutorial as a starting point. 6*481dde66SAndroid Build Coastguard Worker 7*481dde66SAndroid Build Coastguard Worker## Prerequisites 8*481dde66SAndroid Build Coastguard Worker 9*481dde66SAndroid Build Coastguard WorkerTo complete this tutorial, you'll need: 10*481dde66SAndroid Build Coastguard Worker 11*481dde66SAndroid Build Coastguard Worker* A compatible operating system (e.g. Linux, macOS, Windows). 12*481dde66SAndroid Build Coastguard Worker* A compatible C++ compiler that supports at least C++14. 13*481dde66SAndroid Build Coastguard Worker* [Bazel](https://bazel.build/) 7.0 or higher, the preferred build system used 14*481dde66SAndroid Build Coastguard Worker by the GoogleTest team. 15*481dde66SAndroid Build Coastguard Worker 16*481dde66SAndroid Build Coastguard WorkerSee [Supported Platforms](platforms.md) for more information about platforms 17*481dde66SAndroid Build Coastguard Workercompatible with GoogleTest. 18*481dde66SAndroid Build Coastguard Worker 19*481dde66SAndroid Build Coastguard WorkerIf you don't already have Bazel installed, see the 20*481dde66SAndroid Build Coastguard Worker[Bazel installation guide](https://bazel.build/install). 21*481dde66SAndroid Build Coastguard Worker 22*481dde66SAndroid Build Coastguard Worker{: .callout .note} Note: The terminal commands in this tutorial show a Unix 23*481dde66SAndroid Build Coastguard Workershell prompt, but the commands work on the Windows command line as well. 24*481dde66SAndroid Build Coastguard Worker 25*481dde66SAndroid Build Coastguard Worker## Set up a Bazel workspace 26*481dde66SAndroid Build Coastguard Worker 27*481dde66SAndroid Build Coastguard WorkerA 28*481dde66SAndroid Build Coastguard Worker[Bazel workspace](https://docs.bazel.build/versions/main/build-ref.html#workspace) 29*481dde66SAndroid Build Coastguard Workeris a directory on your filesystem that you use to manage source files for the 30*481dde66SAndroid Build Coastguard Workersoftware you want to build. Each workspace directory has a text file named 31*481dde66SAndroid Build Coastguard Worker`MODULE.bazel` which may be empty, or may contain references to external 32*481dde66SAndroid Build Coastguard Workerdependencies required to build the outputs. 33*481dde66SAndroid Build Coastguard Worker 34*481dde66SAndroid Build Coastguard WorkerFirst, create a directory for your workspace: 35*481dde66SAndroid Build Coastguard Worker 36*481dde66SAndroid Build Coastguard Worker``` 37*481dde66SAndroid Build Coastguard Worker$ mkdir my_workspace && cd my_workspace 38*481dde66SAndroid Build Coastguard Worker``` 39*481dde66SAndroid Build Coastguard Worker 40*481dde66SAndroid Build Coastguard WorkerNext, you’ll create the `MODULE.bazel` file to specify dependencies. As of Bazel 41*481dde66SAndroid Build Coastguard Worker7.0, the recommended way to consume GoogleTest is through the 42*481dde66SAndroid Build Coastguard Worker[Bazel Central Registry](https://registry.bazel.build/modules/googletest). To do 43*481dde66SAndroid Build Coastguard Workerthis, create a `MODULE.bazel` file in the root directory of your Bazel workspace 44*481dde66SAndroid Build Coastguard Workerwith the following content: 45*481dde66SAndroid Build Coastguard Worker 46*481dde66SAndroid Build Coastguard Worker``` 47*481dde66SAndroid Build Coastguard Worker# MODULE.bazel 48*481dde66SAndroid Build Coastguard Worker 49*481dde66SAndroid Build Coastguard Worker# Choose the most recent version available at 50*481dde66SAndroid Build Coastguard Worker# https://registry.bazel.build/modules/googletest 51*481dde66SAndroid Build Coastguard Workerbazel_dep(name = "googletest", version = "1.15.2") 52*481dde66SAndroid Build Coastguard Worker``` 53*481dde66SAndroid Build Coastguard Worker 54*481dde66SAndroid Build Coastguard WorkerNow you're ready to build C++ code that uses GoogleTest. 55*481dde66SAndroid Build Coastguard Worker 56*481dde66SAndroid Build Coastguard Worker## Create and run a binary 57*481dde66SAndroid Build Coastguard Worker 58*481dde66SAndroid Build Coastguard WorkerWith your Bazel workspace set up, you can now use GoogleTest code within your 59*481dde66SAndroid Build Coastguard Workerown project. 60*481dde66SAndroid Build Coastguard Worker 61*481dde66SAndroid Build Coastguard WorkerAs an example, create a file named `hello_test.cc` in your `my_workspace` 62*481dde66SAndroid Build Coastguard Workerdirectory with the following contents: 63*481dde66SAndroid Build Coastguard Worker 64*481dde66SAndroid Build Coastguard Worker```cpp 65*481dde66SAndroid Build Coastguard Worker#include <gtest/gtest.h> 66*481dde66SAndroid Build Coastguard Worker 67*481dde66SAndroid Build Coastguard Worker// Demonstrate some basic assertions. 68*481dde66SAndroid Build Coastguard WorkerTEST(HelloTest, BasicAssertions) { 69*481dde66SAndroid Build Coastguard Worker // Expect two strings not to be equal. 70*481dde66SAndroid Build Coastguard Worker EXPECT_STRNE("hello", "world"); 71*481dde66SAndroid Build Coastguard Worker // Expect equality. 72*481dde66SAndroid Build Coastguard Worker EXPECT_EQ(7 * 6, 42); 73*481dde66SAndroid Build Coastguard Worker} 74*481dde66SAndroid Build Coastguard Worker``` 75*481dde66SAndroid Build Coastguard Worker 76*481dde66SAndroid Build Coastguard WorkerGoogleTest provides [assertions](primer.md#assertions) that you use to test the 77*481dde66SAndroid Build Coastguard Workerbehavior of your code. The above sample includes the main GoogleTest header file 78*481dde66SAndroid Build Coastguard Workerand demonstrates some basic assertions. 79*481dde66SAndroid Build Coastguard Worker 80*481dde66SAndroid Build Coastguard WorkerTo build the code, create a file named `BUILD` in the same directory with the 81*481dde66SAndroid Build Coastguard Workerfollowing contents: 82*481dde66SAndroid Build Coastguard Worker 83*481dde66SAndroid Build Coastguard Worker``` 84*481dde66SAndroid Build Coastguard Workercc_test( 85*481dde66SAndroid Build Coastguard Worker name = "hello_test", 86*481dde66SAndroid Build Coastguard Worker size = "small", 87*481dde66SAndroid Build Coastguard Worker srcs = ["hello_test.cc"], 88*481dde66SAndroid Build Coastguard Worker deps = [ 89*481dde66SAndroid Build Coastguard Worker "@googletest//:gtest", 90*481dde66SAndroid Build Coastguard Worker "@googletest//:gtest_main", 91*481dde66SAndroid Build Coastguard Worker ], 92*481dde66SAndroid Build Coastguard Worker) 93*481dde66SAndroid Build Coastguard Worker``` 94*481dde66SAndroid Build Coastguard Worker 95*481dde66SAndroid Build Coastguard WorkerThis `cc_test` rule declares the C++ test binary you want to build, and links to 96*481dde66SAndroid Build Coastguard Workerthe GoogleTest library (`@googletest//:gtest"`) and the GoogleTest `main()` 97*481dde66SAndroid Build Coastguard Workerfunction (`@googletest//:gtest_main`). For more information about Bazel `BUILD` 98*481dde66SAndroid Build Coastguard Workerfiles, see the 99*481dde66SAndroid Build Coastguard Worker[Bazel C++ Tutorial](https://docs.bazel.build/versions/main/tutorial/cpp.html). 100*481dde66SAndroid Build Coastguard Worker 101*481dde66SAndroid Build Coastguard Worker{: .callout .note} 102*481dde66SAndroid Build Coastguard WorkerNOTE: In the example below, we assume Clang or GCC and set `--cxxopt=-std=c++14` 103*481dde66SAndroid Build Coastguard Workerto ensure that GoogleTest is compiled as C++14 instead of the compiler's default 104*481dde66SAndroid Build Coastguard Workersetting (which could be C++11). For MSVC, the equivalent would be 105*481dde66SAndroid Build Coastguard Worker`--cxxopt=/std:c++14`. See [Supported Platforms](platforms.md) for more details 106*481dde66SAndroid Build Coastguard Workeron supported language versions. 107*481dde66SAndroid Build Coastguard Worker 108*481dde66SAndroid Build Coastguard WorkerNow you can build and run your test: 109*481dde66SAndroid Build Coastguard Worker 110*481dde66SAndroid Build Coastguard Worker<pre> 111*481dde66SAndroid Build Coastguard Worker<strong>$ bazel test --cxxopt=-std=c++14 --test_output=all //:hello_test</strong> 112*481dde66SAndroid Build Coastguard WorkerINFO: Analyzed target //:hello_test (26 packages loaded, 362 targets configured). 113*481dde66SAndroid Build Coastguard WorkerINFO: Found 1 test target... 114*481dde66SAndroid Build Coastguard WorkerINFO: From Testing //:hello_test: 115*481dde66SAndroid Build Coastguard Worker==================== Test output for //:hello_test: 116*481dde66SAndroid Build Coastguard WorkerRunning main() from gmock_main.cc 117*481dde66SAndroid Build Coastguard Worker[==========] Running 1 test from 1 test suite. 118*481dde66SAndroid Build Coastguard Worker[----------] Global test environment set-up. 119*481dde66SAndroid Build Coastguard Worker[----------] 1 test from HelloTest 120*481dde66SAndroid Build Coastguard Worker[ RUN ] HelloTest.BasicAssertions 121*481dde66SAndroid Build Coastguard Worker[ OK ] HelloTest.BasicAssertions (0 ms) 122*481dde66SAndroid Build Coastguard Worker[----------] 1 test from HelloTest (0 ms total) 123*481dde66SAndroid Build Coastguard Worker 124*481dde66SAndroid Build Coastguard Worker[----------] Global test environment tear-down 125*481dde66SAndroid Build Coastguard Worker[==========] 1 test from 1 test suite ran. (0 ms total) 126*481dde66SAndroid Build Coastguard Worker[ PASSED ] 1 test. 127*481dde66SAndroid Build Coastguard Worker================================================================================ 128*481dde66SAndroid Build Coastguard WorkerTarget //:hello_test up-to-date: 129*481dde66SAndroid Build Coastguard Worker bazel-bin/hello_test 130*481dde66SAndroid Build Coastguard WorkerINFO: Elapsed time: 4.190s, Critical Path: 3.05s 131*481dde66SAndroid Build Coastguard WorkerINFO: 27 processes: 8 internal, 19 linux-sandbox. 132*481dde66SAndroid Build Coastguard WorkerINFO: Build completed successfully, 27 total actions 133*481dde66SAndroid Build Coastguard Worker//:hello_test PASSED in 0.1s 134*481dde66SAndroid Build Coastguard Worker 135*481dde66SAndroid Build Coastguard WorkerINFO: Build completed successfully, 27 total actions 136*481dde66SAndroid Build Coastguard Worker</pre> 137*481dde66SAndroid Build Coastguard Worker 138*481dde66SAndroid Build Coastguard WorkerCongratulations! You've successfully built and run a test binary using 139*481dde66SAndroid Build Coastguard WorkerGoogleTest. 140*481dde66SAndroid Build Coastguard Worker 141*481dde66SAndroid Build Coastguard Worker## Next steps 142*481dde66SAndroid Build Coastguard Worker 143*481dde66SAndroid Build Coastguard Worker* [Check out the Primer](primer.md) to start learning how to write simple 144*481dde66SAndroid Build Coastguard Worker tests. 145*481dde66SAndroid Build Coastguard Worker* [See the code samples](samples.md) for more examples showing how to use a 146*481dde66SAndroid Build Coastguard Worker variety of GoogleTest features. 147