| # Testing Reference | |
| <!--* toc_depth: 3 *--> | |
| This page lists the facilities provided by GoogleTest for writing test programs. | |
| To use them, add `#include <gtest/gtest.h>`. | |
| ## Macros | |
| GoogleTest defines the following macros for writing tests. | |
| ### TEST {#TEST} | |
| <pre> | |
| TEST(<em>TestSuiteName</em>, <em>TestName</em>) { | |
| ... <em>statements</em> ... | |
| } | |
| </pre> | |
| Defines an individual test named *`TestName`* in the test suite | |
| *`TestSuiteName`*, consisting of the given statements. | |
| Both arguments *`TestSuiteName`* and *`TestName`* must be valid C++ identifiers | |
| and must not contain underscores (`_`). Tests in different test suites can have | |
| the same individual name. | |
| The statements within the test body can be any code under test. | |
| [Assertions](assertions.md) used within the test body determine the outcome of | |
| the test. | |
| ### TEST_F {#TEST_F} | |
| <pre> | |
| TEST_F(<em>TestFixtureName</em>, <em>TestName</em>) { | |
| ... <em>statements</em> ... | |
| } | |
| </pre> | |
| Defines an individual test named *`TestName`* that uses the test fixture class | |
| *`TestFixtureName`*. The test suite name is *`TestFixtureName`*. | |
| Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ | |
| identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be | |
| the name of a test fixture class—see | |
| [Test Fixtures](../primer.md#same-data-multiple-tests). | |
| The statements within the test body can be any code under test. | |
| [Assertions](assertions.md) used within the test body determine the outcome of | |
| the test. | |
| ### TEST_P {#TEST_P} | |
| <pre> | |
| TEST_P(<em>TestFixtureName</em>, <em>TestName</em>) { | |
| ... <em>statements</em> ... | |
| } | |
| </pre> | |
| Defines an individual value-parameterized test named *`TestName`* that uses the | |
| test fixture class *`TestFixtureName`*. The test suite name is | |
| *`TestFixtureName`*. | |
| Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ | |
| identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be | |
| the name of a value-parameterized test fixture class—see | |
| [Value-Parameterized Tests](../advanced.md#value-parameterized-tests). | |
| The statements within the test body can be any code under test. Within the test | |
| body, the test parameter can be accessed with the `GetParam()` function (see | |
| [`WithParamInterface`](#WithParamInterface)). For example: | |
| ```cpp | |
| TEST_P(MyTestSuite, DoesSomething) { | |
| ... | |
| EXPECT_TRUE(DoSomething(GetParam())); | |
| ... | |
| } | |
| ``` | |
| [Assertions](assertions.md) used within the test body determine the outcome of | |
| the test. | |
| See also [`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). | |
| ### INSTANTIATE_TEST_SUITE_P {#INSTANTIATE_TEST_SUITE_P} | |
| `INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`)` | |
| \ | |
| `INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`,`*`name_generator`*`)` | |
| Instantiates the value-parameterized test suite *`TestSuiteName`* (defined with | |
| [`TEST_P`](#TEST_P)). | |
| The argument *`InstantiationName`* is a unique name for the instantiation of the | |
| test suite, to distinguish between multiple instantiations. In test output, the | |
| instantiation name is added as a prefix to the test suite name | |
| *`TestSuiteName`*. If *`InstantiationName`* is empty | |
| (`INSTANTIATE_TEST_SUITE_P(, ...)`), no prefix is added. | |
| The argument *`param_generator`* is one of the following GoogleTest-provided | |
| functions that generate the test parameters, all defined in the `::testing` | |
| namespace: | |
| <span id="param-generators"></span> | |
| | Parameter Generator | Behavior | | |
| | ------------------- | ---------------------------------------------------- | | |
| | `Range(begin, end [, step])` | Yields values `{begin, begin+step, begin+step+step, ...}`. The values do not include `end`. `step` defaults to 1. | | |
| | `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. | | |
| | `ValuesIn(container)` or `ValuesIn(begin,end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. | | |
| | `Bool()` | Yields sequence `{false, true}`. | | |
| | `Combine(g1, g2, ..., gN)` | Yields as `std::tuple` *n*-tuples all combinations (Cartesian product) of the values generated by the given *n* generators `g1`, `g2`, ..., `gN`. | | |
| | `ConvertGenerator<T>(g)` or `ConvertGenerator(g, func)` | Yields values generated by generator `g`, `static_cast` from `T`. (Note: `T` might not be what you expect. See [*Using ConvertGenerator*](#using-convertgenerator) below.) The second overload uses `func` to perform the conversion. | | |
| The optional last argument *`name_generator`* is a function or functor that | |
| generates custom test name suffixes based on the test parameters. The function | |
| must accept an argument of type | |
| [`TestParamInfo<class ParamType>`](#TestParamInfo) and return a `std::string`. | |
| The test name suffix can only contain alphanumeric characters and underscores. | |
| GoogleTest provides [`PrintToStringParamName`](#PrintToStringParamName), or a | |
| custom function can be used for more control: | |
| ```cpp | |
| INSTANTIATE_TEST_SUITE_P( | |
| MyInstantiation, MyTestSuite, | |
| testing::Values(...), | |
| [](const testing::TestParamInfo<MyTestSuite::ParamType>& info) { | |
| // Can use info.param here to generate the test suffix | |
| std::string name = ... | |
| return name; | |
| }); | |
| ``` | |
| For more information, see | |
| [Value-Parameterized Tests](../advanced.md#value-parameterized-tests). | |
| See also | |
| [`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST`](#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST). | |
| ###### Using `ConvertGenerator` | |
| The functions listed in the table above appear to return generators that create | |
| values of the desired types, but this is not generally the case. Rather, they | |
| typically return factory objects that convert to the the desired generators. | |
| This affords some flexibility in allowing you to specify values of types that | |
| are different from, yet implicitly convertible to, the actual parameter type | |
| required by your fixture class. | |
| For example, you can do the following with a fixture that requires an `int` | |
| parameter: | |
| ```cpp | |
| INSTANTIATE_TEST_SUITE_P(MyInstantiation, MyTestSuite, | |
| testing::Values(1, 1.2)); // Yes, Values() supports heterogeneous argument types. | |
| ``` | |
| It might seem obvious that `1.2` — a `double` — will be converted to | |
| an `int` but in actuality it requires some template gymnastics involving the | |
| indirection described in the previous paragraph. | |
| What if your parameter type is not implicitly convertible from the generated | |
| type but is *explicitly* convertible? There will be no automatic conversion, but | |
| you can force it by applying `ConvertGenerator<T>`. The compiler can | |
| automatically deduce the target type (your fixture's parameter type), but | |
| because of the aforementioned indirection it cannot decide what the generated | |
| type should be. You need to tell it, by providing the type `T` explicitly. Thus | |
| `T` should not be your fixture's parameter type, but rather an intermediate type | |
| that is supported by the factory object, and which can be `static_cast` to the | |
| fixture's parameter type: | |
| ```cpp | |
| // The fixture's parameter type. | |
| class MyParam { | |
| public: | |
| // Explicit converting ctor. | |
| explicit MyParam(const std::tuple<int, bool>& t); | |
| ... | |
| }; | |
| INSTANTIATE_TEST_SUITE_P(MyInstantiation, MyTestSuite, | |
| ConvertGenerator<std::tuple<int, bool>>(Combine(Values(0.1, 1.2), Bool()))); | |
| ``` | |
| In this example `Combine` supports the generation of `std::tuple<int, bool>>` | |
| objects (even though the provided values for the first tuple element are | |
| `double`s) and those `tuple`s get converted into `MyParam` objects by virtue of | |
| the call to `ConvertGenerator`. | |
| For parameter types that are not convertible from the generated types you can | |
| provide a callable that does the conversion. The callable accepts an object of | |
| the generated type and returns an object of the fixture's parameter type. The | |
| generated type can often be deduced by the compiler from the callable's call | |
| signature so you do not usually need specify it explicitly (but see a caveat | |
| below). | |
| ```cpp | |
| // The fixture's parameter type. | |
| class MyParam { | |
| public: | |
| MyParam(int, bool); | |
| ... | |
| }; | |
| INSTANTIATE_TEST_SUITE_P(MyInstantiation, MyTestSuite, | |
| ConvertGenerator(Combine(Values(1, 1.2), Bool()), | |
| [](const std::tuple<int i, bool>& t){ | |
| const auto [i, b] = t; | |
| return MyParam(i, b); | |
| })); | |
| ``` | |
| The callable may be anything that can be used to initialize a `std::function` | |
| with the appropriate call signature. Note the callable's return object gets | |
| `static_cast` to the fixture's parameter type, so it does not have to be of that | |
| exact type, only convertible to it. | |
| **Caveat:** Consider the following example. | |
| ```cpp | |
| INSTANTIATE_TEST_SUITE_P(MyInstantiation, MyTestSuite, | |
| ConvertGenerator(Values(std::string("s")), [](std::string_view s) { ... })); | |
| ``` | |
| The `string` argument gets copied into the factory object returned by `Values`. | |
| Then, because the generated type deduced from the lambda is `string_view`, the | |
| factory object spawns a generator that holds a `string_view` referencing that | |
| `string`. Unfortunately, by the time this generator gets invoked, the factory | |
| object is gone and the `string_view` is dangling. | |
| To overcome this problem you can specify the generated type explicitly: | |
| `ConvertGenerator<std::string>(Values(std::string("s")), [](std::string_view s) | |
| { ... })`. Alternatively, you can change the lambda's signature to take a | |
| `std::string` or a `const std::string&` (the latter will not leave you with a | |
| dangling reference because the type deduction strips off the reference and the | |
| `const`). | |
| ### TYPED_TEST_SUITE {#TYPED_TEST_SUITE} | |
| `TYPED_TEST_SUITE(`*`TestFixtureName`*`,`*`Types`*`)` | |
| `TYPED_TEST_SUITE(`*`TestFixtureName`*`,`*`Types`*`,`*`NameGenerator`*`)` | |
| Defines a typed test suite based on the test fixture *`TestFixtureName`*. The | |
| test suite name is *`TestFixtureName`*. | |
| The argument *`TestFixtureName`* is a fixture class template, parameterized by a | |
| type, for example: | |
| ```cpp | |
| template <typename T> | |
| class MyFixture : public testing::Test { | |
| public: | |
| ... | |
| using List = std::list<T>; | |
| static T shared_; | |
| T value_; | |
| }; | |
| ``` | |
| The argument *`Types`* is a [`Types`](#Types) object representing the list of | |
| types to run the tests on, for example: | |
| ```cpp | |
| using MyTypes = ::testing::Types<char, int, unsigned int>; | |
| TYPED_TEST_SUITE(MyFixture, MyTypes); | |
| ``` | |
| The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` | |
| macro to parse correctly. | |
| The optional third argument *`NameGenerator`* allows specifying a class that | |
| exposes a templated static function `GetName(int)`. For example: | |
| ```cpp | |
| class NameGenerator { | |
| public: | |
| template <typename T> | |
| static std::string GetName(int) { | |
| if constexpr (std::is_same_v<T, char>) return "char"; | |
| if constexpr (std::is_same_v<T, int>) return "int"; | |
| if constexpr (std::is_same_v<T, unsigned int>) return "unsignedInt"; | |
| } | |
| }; | |
| TYPED_TEST_SUITE(MyFixture, MyTypes, NameGenerator); | |
| ``` | |
| See also [`TYPED_TEST`](#TYPED_TEST) and | |
| [Typed Tests](../advanced.md#typed-tests) for more information. | |
| ### TYPED_TEST {#TYPED_TEST} | |
| <pre> | |
| TYPED_TEST(<em>TestSuiteName</em>, <em>TestName</em>) { | |
| ... <em>statements</em> ... | |
| } | |
| </pre> | |
| Defines an individual typed test named *`TestName`* in the typed test suite | |
| *`TestSuiteName`*. The test suite must be defined with | |
| [`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE). | |
| Within the test body, the special name `TypeParam` refers to the type parameter, | |
| and `TestFixture` refers to the fixture class. See the following example: | |
| ```cpp | |
| TYPED_TEST(MyFixture, Example) { | |
| // Inside a test, refer to the special name TypeParam to get the type | |
| // parameter. Since we are inside a derived class template, C++ requires | |
| // us to visit the members of MyFixture via 'this'. | |
| TypeParam n = this->value_; | |
| // To visit static members of the fixture, add the 'TestFixture::' | |
| // prefix. | |
| n += TestFixture::shared_; | |
| // To refer to typedefs in the fixture, add the 'typename TestFixture::' | |
| // prefix. The 'typename' is required to satisfy the compiler. | |
| typename TestFixture::List values; | |
| values.push_back(n); | |
| ... | |
| } | |
| ``` | |
| For more information, see [Typed Tests](../advanced.md#typed-tests). | |
| ### TYPED_TEST_SUITE_P {#TYPED_TEST_SUITE_P} | |
| `TYPED_TEST_SUITE_P(`*`TestFixtureName`*`)` | |
| Defines a type-parameterized test suite based on the test fixture | |
| *`TestFixtureName`*. The test suite name is *`TestFixtureName`*. | |
| The argument *`TestFixtureName`* is a fixture class template, parameterized by a | |
| type. See [`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE) for an example. | |
| See also [`TYPED_TEST_P`](#TYPED_TEST_P) and | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more | |
| information. | |
| ### TYPED_TEST_P {#TYPED_TEST_P} | |
| <pre> | |
| TYPED_TEST_P(<em>TestSuiteName</em>, <em>TestName</em>) { | |
| ... <em>statements</em> ... | |
| } | |
| </pre> | |
| Defines an individual type-parameterized test named *`TestName`* in the | |
| type-parameterized test suite *`TestSuiteName`*. The test suite must be defined | |
| with [`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P). | |
| Within the test body, the special name `TypeParam` refers to the type parameter, | |
| and `TestFixture` refers to the fixture class. See [`TYPED_TEST`](#TYPED_TEST) | |
| for an example. | |
| See also [`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P) and | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more | |
| information. | |
| ### REGISTER_TYPED_TEST_SUITE_P {#REGISTER_TYPED_TEST_SUITE_P} | |
| `REGISTER_TYPED_TEST_SUITE_P(`*`TestSuiteName`*`,`*`TestNames...`*`)` | |
| Registers the type-parameterized tests *`TestNames...`* of the test suite | |
| *`TestSuiteName`*. The test suite and tests must be defined with | |
| [`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P) and [`TYPED_TEST_P`](#TYPED_TEST_P). | |
| For example: | |
| ```cpp | |
| // Define the test suite and tests. | |
| TYPED_TEST_SUITE_P(MyFixture); | |
| TYPED_TEST_P(MyFixture, HasPropertyA) { ... } | |
| TYPED_TEST_P(MyFixture, HasPropertyB) { ... } | |
| // Register the tests in the test suite. | |
| REGISTER_TYPED_TEST_SUITE_P(MyFixture, HasPropertyA, HasPropertyB); | |
| ``` | |
| See also [`INSTANTIATE_TYPED_TEST_SUITE_P`](#INSTANTIATE_TYPED_TEST_SUITE_P) and | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more | |
| information. | |
| ### INSTANTIATE_TYPED_TEST_SUITE_P {#INSTANTIATE_TYPED_TEST_SUITE_P} | |
| `INSTANTIATE_TYPED_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`Types`*`)` | |
| Instantiates the type-parameterized test suite *`TestSuiteName`*. The test suite | |
| must be registered with | |
| [`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P). | |
| The argument *`InstantiationName`* is a unique name for the instantiation of the | |
| test suite, to distinguish between multiple instantiations. In test output, the | |
| instantiation name is added as a prefix to the test suite name | |
| *`TestSuiteName`*. If *`InstantiationName`* is empty | |
| (`INSTANTIATE_TYPED_TEST_SUITE_P(, ...)`), no prefix is added. | |
| The argument *`Types`* is a [`Types`](#Types) object representing the list of | |
| types to run the tests on, for example: | |
| ```cpp | |
| using MyTypes = ::testing::Types<char, int, unsigned int>; | |
| INSTANTIATE_TYPED_TEST_SUITE_P(MyInstantiation, MyFixture, MyTypes); | |
| ``` | |
| The type alias (`using` or `typedef`) is necessary for the | |
| `INSTANTIATE_TYPED_TEST_SUITE_P` macro to parse correctly. | |
| For more information, see | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests). | |
| ### FRIEND_TEST {#FRIEND_TEST} | |
| `FRIEND_TEST(`*`TestSuiteName`*`,`*`TestName`*`)` | |
| Within a class body, declares an individual test as a friend of the class, | |
| enabling the test to access private class members. | |
| If the class is defined in a namespace, then in order to be friends of the | |
| class, test fixtures and tests must be defined in the exact same namespace, | |
| without inline or anonymous namespaces. | |
| For example, if the class definition looks like the following: | |
| ```cpp | |
| namespace my_namespace { | |
| class MyClass { | |
| friend class MyClassTest; | |
| FRIEND_TEST(MyClassTest, HasPropertyA); | |
| FRIEND_TEST(MyClassTest, HasPropertyB); | |
| ... definition of class MyClass ... | |
| }; | |
| } // namespace my_namespace | |
| ``` | |
| Then the test code should look like: | |
| ```cpp | |
| namespace my_namespace { | |
| class MyClassTest : public testing::Test { | |
| ... | |
| }; | |
| TEST_F(MyClassTest, HasPropertyA) { ... } | |
| TEST_F(MyClassTest, HasPropertyB) { ... } | |
| } // namespace my_namespace | |
| ``` | |
| See [Testing Private Code](../advanced.md#testing-private-code) for more | |
| information. | |
| ### SCOPED_TRACE {#SCOPED_TRACE} | |
| `SCOPED_TRACE(`*`message`*`)` | |
| Causes the current file name, line number, and the given message *`message`* to | |
| be added to the failure message for each assertion failure that occurs in the | |
| scope. | |
| For more information, see | |
| [Adding Traces to Assertions](../advanced.md#adding-traces-to-assertions). | |
| See also the [`ScopedTrace` class](#ScopedTrace). | |
| ### GTEST_SKIP {#GTEST_SKIP} | |
| `GTEST_SKIP()` | |
| Prevents further test execution at runtime. | |
| Can be used in individual test cases or in the `SetUp()` methods of test | |
| environments or test fixtures (classes derived from the | |
| [`Environment`](#Environment) or [`Test`](#Test) classes). If used in a global | |
| test environment `SetUp()` method, it skips all tests in the test program. If | |
| used in a test fixture `SetUp()` method, it skips all tests in the corresponding | |
| test suite. | |
| Similar to assertions, `GTEST_SKIP` allows streaming a custom message into it. | |
| See [Skipping Test Execution](../advanced.md#skipping-test-execution) for more | |
| information. | |
| ### GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST {#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST} | |
| `GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(`*`TestSuiteName`*`)` | |
| Allows the value-parameterized test suite *`TestSuiteName`* to be | |
| uninstantiated. | |
| By default, every [`TEST_P`](#TEST_P) call without a corresponding | |
| [`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P) call causes a failing | |
| test in the test suite `GoogleTestVerification`. | |
| `GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST` suppresses this failure for the | |
| given test suite. | |
| ## Classes and types | |
| GoogleTest defines the following classes and types to help with writing tests. | |
| ### AssertionResult {#AssertionResult} | |
| `testing::AssertionResult` | |
| A class for indicating whether an assertion was successful. | |
| When the assertion wasn't successful, the `AssertionResult` object stores a | |
| non-empty failure message that can be retrieved with the object's `message()` | |
| method. | |
| To create an instance of this class, use one of the factory functions | |
| [`AssertionSuccess()`](#AssertionSuccess) or | |
| [`AssertionFailure()`](#AssertionFailure). | |
| ### AssertionException {#AssertionException} | |
| `testing::AssertionException` | |
| Exception which can be thrown from | |
| [`TestEventListener::OnTestPartResult`](#TestEventListener::OnTestPartResult). | |
| ### EmptyTestEventListener {#EmptyTestEventListener} | |
| `testing::EmptyTestEventListener` | |
| Provides an empty implementation of all methods in the | |
| [`TestEventListener`](#TestEventListener) interface, such that a subclass only | |
| needs to override the methods it cares about. | |
| ### Environment {#Environment} | |
| `testing::Environment` | |
| Represents a global test environment. See | |
| [Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down). | |
| #### Protected Methods {#Environment-protected} | |
| ##### SetUp {#Environment::SetUp} | |
| `virtual void Environment::SetUp()` | |
| Override this to define how to set up the environment. | |
| ##### TearDown {#Environment::TearDown} | |
| `virtual void Environment::TearDown()` | |
| Override this to define how to tear down the environment. | |
| ### ScopedTrace {#ScopedTrace} | |
| `testing::ScopedTrace` | |
| An instance of this class causes a trace to be included in every test failure | |
| message generated by code in the scope of the lifetime of the `ScopedTrace` | |
| instance. The effect is undone with the destruction of the instance. | |
| The `ScopedTrace` constructor has the following form: | |
| ```cpp | |
| template <typename T> | |
| ScopedTrace(const char* file, int line, const T& message) | |
| ``` | |
| Example usage: | |
| ```cpp | |
| testing::ScopedTrace trace("file.cc", 123, "message"); | |
| ``` | |
| The resulting trace includes the given source file path and line number, and the | |
| given message. The `message` argument can be anything streamable to | |
| `std::ostream`. | |
| See also [`SCOPED_TRACE`](#SCOPED_TRACE). | |
| ### Test {#Test} | |
| `testing::Test` | |
| The abstract class that all tests inherit from. `Test` is not copyable. | |
| #### Public Methods {#Test-public} | |
| ##### SetUpTestSuite {#Test::SetUpTestSuite} | |
| `static void Test::SetUpTestSuite()` | |
| Performs shared setup for all tests in the test suite. GoogleTest calls | |
| `SetUpTestSuite()` before running the first test in the test suite. | |
| ##### TearDownTestSuite {#Test::TearDownTestSuite} | |
| `static void Test::TearDownTestSuite()` | |
| Performs shared teardown for all tests in the test suite. GoogleTest calls | |
| `TearDownTestSuite()` after running the last test in the test suite. | |
| ##### HasFatalFailure {#Test::HasFatalFailure} | |
| `static bool Test::HasFatalFailure()` | |
| Returns true if and only if the current test has a fatal failure. | |
| ##### HasNonfatalFailure {#Test::HasNonfatalFailure} | |
| `static bool Test::HasNonfatalFailure()` | |
| Returns true if and only if the current test has a nonfatal failure. | |
| ##### HasFailure {#Test::HasFailure} | |
| `static bool Test::HasFailure()` | |
| Returns true if and only if the current test has any failure, either fatal or | |
| nonfatal. | |
| ##### IsSkipped {#Test::IsSkipped} | |
| `static bool Test::IsSkipped()` | |
| Returns true if and only if the current test was skipped. | |
| ##### RecordProperty {#Test::RecordProperty} | |
| `static void Test::RecordProperty(const std::string& key, const std::string& | |
| value)` \ | |
| `static void Test::RecordProperty(const std::string& key, int value)` | |
| Logs a property for the current test, test suite, or entire invocation of the | |
| test program. Only the last value for a given key is logged. | |
| The key must be a valid XML attribute name, and cannot conflict with the ones | |
| already used by GoogleTest (`name`, `file`, `line`, `status`, `time`, | |
| `classname`, `type_param`, and `value_param`). | |
| `RecordProperty` is `public static` so it can be called from utility functions | |
| that are not members of the test fixture. | |
| Calls to `RecordProperty` made during the lifespan of the test (from the moment | |
| its constructor starts to the moment its destructor finishes) are output in XML | |
| as attributes of the `<testcase>` element. Properties recorded from a fixture's | |
| `SetUpTestSuite` or `TearDownTestSuite` methods are logged as attributes of the | |
| corresponding `<testsuite>` element. Calls to `RecordProperty` made in the | |
| global context (before or after invocation of `RUN_ALL_TESTS` or from the | |
| `SetUp`/`TearDown` methods of registered `Environment` objects) are output as | |
| attributes of the `<testsuites>` element. | |
| #### Protected Methods {#Test-protected} | |
| ##### SetUp {#Test::SetUp} | |
| `virtual void Test::SetUp()` | |
| Override this to perform test fixture setup. GoogleTest calls `SetUp()` before | |
| running each individual test. | |
| ##### TearDown {#Test::TearDown} | |
| `virtual void Test::TearDown()` | |
| Override this to perform test fixture teardown. GoogleTest calls `TearDown()` | |
| after running each individual test. | |
| ### TestWithParam {#TestWithParam} | |
| `testing::TestWithParam<T>` | |
| A convenience class which inherits from both [`Test`](#Test) and | |
| [`WithParamInterface<T>`](#WithParamInterface). | |
| ### TestSuite {#TestSuite} | |
| Represents a test suite. `TestSuite` is not copyable. | |
| #### Public Methods {#TestSuite-public} | |
| ##### name {#TestSuite::name} | |
| `const char* TestSuite::name() const` | |
| Gets the name of the test suite. | |
| ##### type_param {#TestSuite::type_param} | |
| `const char* TestSuite::type_param() const` | |
| Returns the name of the parameter type, or `NULL` if this is not a typed or | |
| type-parameterized test suite. See [Typed Tests](../advanced.md#typed-tests) and | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests). | |
| ##### should_run {#TestSuite::should_run} | |
| `bool TestSuite::should_run() const` | |
| Returns true if any test in this test suite should run. | |
| ##### successful_test_count {#TestSuite::successful_test_count} | |
| `int TestSuite::successful_test_count() const` | |
| Gets the number of successful tests in this test suite. | |
| ##### skipped_test_count {#TestSuite::skipped_test_count} | |
| `int TestSuite::skipped_test_count() const` | |
| Gets the number of skipped tests in this test suite. | |
| ##### failed_test_count {#TestSuite::failed_test_count} | |
| `int TestSuite::failed_test_count() const` | |
| Gets the number of failed tests in this test suite. | |
| ##### reportable_disabled_test_count {#TestSuite::reportable_disabled_test_count} | |
| `int TestSuite::reportable_disabled_test_count() const` | |
| Gets the number of disabled tests that will be reported in the XML report. | |
| ##### disabled_test_count {#TestSuite::disabled_test_count} | |
| `int TestSuite::disabled_test_count() const` | |
| Gets the number of disabled tests in this test suite. | |
| ##### reportable_test_count {#TestSuite::reportable_test_count} | |
| `int TestSuite::reportable_test_count() const` | |
| Gets the number of tests to be printed in the XML report. | |
| ##### test_to_run_count {#TestSuite::test_to_run_count} | |
| `int TestSuite::test_to_run_count() const` | |
| Get the number of tests in this test suite that should run. | |
| ##### total_test_count {#TestSuite::total_test_count} | |
| `int TestSuite::total_test_count() const` | |
| Gets the number of all tests in this test suite. | |
| ##### Passed {#TestSuite::Passed} | |
| `bool TestSuite::Passed() const` | |
| Returns true if and only if the test suite passed. | |
| ##### Failed {#TestSuite::Failed} | |
| `bool TestSuite::Failed() const` | |
| Returns true if and only if the test suite failed. | |
| ##### elapsed_time {#TestSuite::elapsed_time} | |
| `TimeInMillis TestSuite::elapsed_time() const` | |
| Returns the elapsed time, in milliseconds. | |
| ##### start_timestamp {#TestSuite::start_timestamp} | |
| `TimeInMillis TestSuite::start_timestamp() const` | |
| Gets the time of the test suite start, in ms from the start of the UNIX epoch. | |
| ##### GetTestInfo {#TestSuite::GetTestInfo} | |
| `const TestInfo* TestSuite::GetTestInfo(int i) const` | |
| Returns the [`TestInfo`](#TestInfo) for the `i`-th test among all the tests. `i` | |
| can range from 0 to `total_test_count() - 1`. If `i` is not in that range, | |
| returns `NULL`. | |
| ##### ad_hoc_test_result {#TestSuite::ad_hoc_test_result} | |
| `const TestResult& TestSuite::ad_hoc_test_result() const` | |
| Returns the [`TestResult`](#TestResult) that holds test properties recorded | |
| during execution of `SetUpTestSuite` and `TearDownTestSuite`. | |
| ### TestInfo {#TestInfo} | |
| `testing::TestInfo` | |
| Stores information about a test. | |
| #### Public Methods {#TestInfo-public} | |
| ##### test_suite_name {#TestInfo::test_suite_name} | |
| `const char* TestInfo::test_suite_name() const` | |
| Returns the test suite name. | |
| ##### name {#TestInfo::name} | |
| `const char* TestInfo::name() const` | |
| Returns the test name. | |
| ##### type_param {#TestInfo::type_param} | |
| `const char* TestInfo::type_param() const` | |
| Returns the name of the parameter type, or `NULL` if this is not a typed or | |
| type-parameterized test. See [Typed Tests](../advanced.md#typed-tests) and | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests). | |
| ##### value_param {#TestInfo::value_param} | |
| `const char* TestInfo::value_param() const` | |
| Returns the text representation of the value parameter, or `NULL` if this is not | |
| a value-parameterized test. See | |
| [Value-Parameterized Tests](../advanced.md#value-parameterized-tests). | |
| ##### file {#TestInfo::file} | |
| `const char* TestInfo::file() const` | |
| Returns the file name where this test is defined. | |
| ##### line {#TestInfo::line} | |
| `int TestInfo::line() const` | |
| Returns the line where this test is defined. | |
| ##### is_in_another_shard {#TestInfo::is_in_another_shard} | |
| `bool TestInfo::is_in_another_shard() const` | |
| Returns true if this test should not be run because it's in another shard. | |
| ##### should_run {#TestInfo::should_run} | |
| `bool TestInfo::should_run() const` | |
| Returns true if this test should run, that is if the test is not disabled (or it | |
| is disabled but the `also_run_disabled_tests` flag has been specified) and its | |
| full name matches the user-specified filter. | |
| GoogleTest allows the user to filter the tests by their full names. Only the | |
| tests that match the filter will run. See | |
| [Running a Subset of the Tests](../advanced.md#running-a-subset-of-the-tests) | |
| for more information. | |
| ##### is_reportable {#TestInfo::is_reportable} | |
| `bool TestInfo::is_reportable() const` | |
| Returns true if and only if this test will appear in the XML report. | |
| ##### result {#TestInfo::result} | |
| `const TestResult* TestInfo::result() const` | |
| Returns the result of the test. See [`TestResult`](#TestResult). | |
| ### TestParamInfo {#TestParamInfo} | |
| `testing::TestParamInfo<T>` | |
| Describes a parameter to a value-parameterized test. The type `T` is the type of | |
| the parameter. | |
| Contains the fields `param` and `index` which hold the value of the parameter | |
| and its integer index respectively. | |
| ### UnitTest {#UnitTest} | |
| `testing::UnitTest` | |
| This class contains information about the test program. | |
| `UnitTest` is a singleton class. The only instance is created when | |
| `UnitTest::GetInstance()` is first called. This instance is never deleted. | |
| `UnitTest` is not copyable. | |
| #### Public Methods {#UnitTest-public} | |
| ##### GetInstance {#UnitTest::GetInstance} | |
| `static UnitTest* UnitTest::GetInstance()` | |
| Gets the singleton `UnitTest` object. The first time this method is called, a | |
| `UnitTest` object is constructed and returned. Consecutive calls will return the | |
| same object. | |
| ##### original_working_dir {#UnitTest::original_working_dir} | |
| `const char* UnitTest::original_working_dir() const` | |
| Returns the working directory when the first [`TEST()`](#TEST) or | |
| [`TEST_F()`](#TEST_F) was executed. The `UnitTest` object owns the string. | |
| ##### current_test_suite {#UnitTest::current_test_suite} | |
| `const TestSuite* UnitTest::current_test_suite() const` | |
| Returns the [`TestSuite`](#TestSuite) object for the test that's currently | |
| running, or `NULL` if no test is running. | |
| ##### current_test_info {#UnitTest::current_test_info} | |
| `const TestInfo* UnitTest::current_test_info() const` | |
| Returns the [`TestInfo`](#TestInfo) object for the test that's currently | |
| running, or `NULL` if no test is running. | |
| ##### random_seed {#UnitTest::random_seed} | |
| `int UnitTest::random_seed() const` | |
| Returns the random seed used at the start of the current test run. | |
| ##### successful_test_suite_count {#UnitTest::successful_test_suite_count} | |
| `int UnitTest::successful_test_suite_count() const` | |
| Gets the number of successful test suites. | |
| ##### failed_test_suite_count {#UnitTest::failed_test_suite_count} | |
| `int UnitTest::failed_test_suite_count() const` | |
| Gets the number of failed test suites. | |
| ##### total_test_suite_count {#UnitTest::total_test_suite_count} | |
| `int UnitTest::total_test_suite_count() const` | |
| Gets the number of all test suites. | |
| ##### test_suite_to_run_count {#UnitTest::test_suite_to_run_count} | |
| `int UnitTest::test_suite_to_run_count() const` | |
| Gets the number of all test suites that contain at least one test that should | |
| run. | |
| ##### successful_test_count {#UnitTest::successful_test_count} | |
| `int UnitTest::successful_test_count() const` | |
| Gets the number of successful tests. | |
| ##### skipped_test_count {#UnitTest::skipped_test_count} | |
| `int UnitTest::skipped_test_count() const` | |
| Gets the number of skipped tests. | |
| ##### failed_test_count {#UnitTest::failed_test_count} | |
| `int UnitTest::failed_test_count() const` | |
| Gets the number of failed tests. | |
| ##### reportable_disabled_test_count {#UnitTest::reportable_disabled_test_count} | |
| `int UnitTest::reportable_disabled_test_count() const` | |
| Gets the number of disabled tests that will be reported in the XML report. | |
| ##### disabled_test_count {#UnitTest::disabled_test_count} | |
| `int UnitTest::disabled_test_count() const` | |
| Gets the number of disabled tests. | |
| ##### reportable_test_count {#UnitTest::reportable_test_count} | |
| `int UnitTest::reportable_test_count() const` | |
| Gets the number of tests to be printed in the XML report. | |
| ##### total_test_count {#UnitTest::total_test_count} | |
| `int UnitTest::total_test_count() const` | |
| Gets the number of all tests. | |
| ##### test_to_run_count {#UnitTest::test_to_run_count} | |
| `int UnitTest::test_to_run_count() const` | |
| Gets the number of tests that should run. | |
| ##### start_timestamp {#UnitTest::start_timestamp} | |
| `TimeInMillis UnitTest::start_timestamp() const` | |
| Gets the time of the test program start, in ms from the start of the UNIX epoch. | |
| ##### elapsed_time {#UnitTest::elapsed_time} | |
| `TimeInMillis UnitTest::elapsed_time() const` | |
| Gets the elapsed time, in milliseconds. | |
| ##### Passed {#UnitTest::Passed} | |
| `bool UnitTest::Passed() const` | |
| Returns true if and only if the unit test passed (i.e. all test suites passed). | |
| ##### Failed {#UnitTest::Failed} | |
| `bool UnitTest::Failed() const` | |
| Returns true if and only if the unit test failed (i.e. some test suite failed or | |
| something outside of all tests failed). | |
| ##### GetTestSuite {#UnitTest::GetTestSuite} | |
| `const TestSuite* UnitTest::GetTestSuite(int i) const` | |
| Gets the [`TestSuite`](#TestSuite) object for the `i`-th test suite among all | |
| the test suites. `i` can range from 0 to `total_test_suite_count() - 1`. If `i` | |
| is not in that range, returns `NULL`. | |
| ##### ad_hoc_test_result {#UnitTest::ad_hoc_test_result} | |
| `const TestResult& UnitTest::ad_hoc_test_result() const` | |
| Returns the [`TestResult`](#TestResult) containing information on test failures | |
| and properties logged outside of individual test suites. | |
| ##### listeners {#UnitTest::listeners} | |
| `TestEventListeners& UnitTest::listeners()` | |
| Returns the list of event listeners that can be used to track events inside | |
| GoogleTest. See [`TestEventListeners`](#TestEventListeners). | |
| ### TestEventListener {#TestEventListener} | |
| `testing::TestEventListener` | |
| The interface for tracing execution of tests. The methods below are listed in | |
| the order the corresponding events are fired. | |
| #### Public Methods {#TestEventListener-public} | |
| ##### OnTestProgramStart {#TestEventListener::OnTestProgramStart} | |
| `virtual void TestEventListener::OnTestProgramStart(const UnitTest& unit_test)` | |
| Fired before any test activity starts. | |
| ##### OnTestIterationStart {#TestEventListener::OnTestIterationStart} | |
| `virtual void TestEventListener::OnTestIterationStart(const UnitTest& unit_test, | |
| int iteration)` | |
| Fired before each iteration of tests starts. There may be more than one | |
| iteration if `GTEST_FLAG(repeat)` is set. `iteration` is the iteration index, | |
| starting from 0. | |
| ##### OnEnvironmentsSetUpStart {#TestEventListener::OnEnvironmentsSetUpStart} | |
| `virtual void TestEventListener::OnEnvironmentsSetUpStart(const UnitTest& | |
| unit_test)` | |
| Fired before environment set-up for each iteration of tests starts. | |
| ##### OnEnvironmentsSetUpEnd {#TestEventListener::OnEnvironmentsSetUpEnd} | |
| `virtual void TestEventListener::OnEnvironmentsSetUpEnd(const UnitTest& | |
| unit_test)` | |
| Fired after environment set-up for each iteration of tests ends. | |
| ##### OnTestSuiteStart {#TestEventListener::OnTestSuiteStart} | |
| `virtual void TestEventListener::OnTestSuiteStart(const TestSuite& test_suite)` | |
| Fired before the test suite starts. | |
| ##### OnTestStart {#TestEventListener::OnTestStart} | |
| `virtual void TestEventListener::OnTestStart(const TestInfo& test_info)` | |
| Fired before the test starts. | |
| ##### OnTestPartResult {#TestEventListener::OnTestPartResult} | |
| `virtual void TestEventListener::OnTestPartResult(const TestPartResult& | |
| test_part_result)` | |
| Fired after a failed assertion or a `SUCCEED()` invocation. If you want to throw | |
| an exception from this function to skip to the next test, it must be an | |
| [`AssertionException`](#AssertionException) or inherited from it. | |
| ##### OnTestEnd {#TestEventListener::OnTestEnd} | |
| `virtual void TestEventListener::OnTestEnd(const TestInfo& test_info)` | |
| Fired after the test ends. | |
| ##### OnTestSuiteEnd {#TestEventListener::OnTestSuiteEnd} | |
| `virtual void TestEventListener::OnTestSuiteEnd(const TestSuite& test_suite)` | |
| Fired after the test suite ends. | |
| ##### OnEnvironmentsTearDownStart {#TestEventListener::OnEnvironmentsTearDownStart} | |
| `virtual void TestEventListener::OnEnvironmentsTearDownStart(const UnitTest& | |
| unit_test)` | |
| Fired before environment tear-down for each iteration of tests starts. | |
| ##### OnEnvironmentsTearDownEnd {#TestEventListener::OnEnvironmentsTearDownEnd} | |
| `virtual void TestEventListener::OnEnvironmentsTearDownEnd(const UnitTest& | |
| unit_test)` | |
| Fired after environment tear-down for each iteration of tests ends. | |
| ##### OnTestIterationEnd {#TestEventListener::OnTestIterationEnd} | |
| `virtual void TestEventListener::OnTestIterationEnd(const UnitTest& unit_test, | |
| int iteration)` | |
| Fired after each iteration of tests finishes. | |
| ##### OnTestProgramEnd {#TestEventListener::OnTestProgramEnd} | |
| `virtual void TestEventListener::OnTestProgramEnd(const UnitTest& unit_test)` | |
| Fired after all test activities have ended. | |
| ### TestEventListeners {#TestEventListeners} | |
| `testing::TestEventListeners` | |
| Lets users add listeners to track events in GoogleTest. | |
| #### Public Methods {#TestEventListeners-public} | |
| ##### Append {#TestEventListeners::Append} | |
| `void TestEventListeners::Append(TestEventListener* listener)` | |
| Appends an event listener to the end of the list. GoogleTest assumes ownership | |
| of the listener (i.e. it will delete the listener when the test program | |
| finishes). | |
| ##### Release {#TestEventListeners::Release} | |
| `TestEventListener* TestEventListeners::Release(TestEventListener* listener)` | |
| Removes the given event listener from the list and returns it. It then becomes | |
| the caller's responsibility to delete the listener. Returns `NULL` if the | |
| listener is not found in the list. | |
| ##### default_result_printer {#TestEventListeners::default_result_printer} | |
| `TestEventListener* TestEventListeners::default_result_printer() const` | |
| Returns the standard listener responsible for the default console output. Can be | |
| removed from the listeners list to shut down default console output. Note that | |
| removing this object from the listener list with | |
| [`Release()`](#TestEventListeners::Release) transfers its ownership to the | |
| caller and makes this function return `NULL` the next time. | |
| ##### default_xml_generator {#TestEventListeners::default_xml_generator} | |
| `TestEventListener* TestEventListeners::default_xml_generator() const` | |
| Returns the standard listener responsible for the default XML output controlled | |
| by the `--gtest_output=xml` flag. Can be removed from the listeners list by | |
| users who want to shut down the default XML output controlled by this flag and | |
| substitute it with custom one. Note that removing this object from the listener | |
| list with [`Release()`](#TestEventListeners::Release) transfers its ownership to | |
| the caller and makes this function return `NULL` the next time. | |
| ### TestPartResult {#TestPartResult} | |
| `testing::TestPartResult` | |
| A copyable object representing the result of a test part (i.e. an assertion or | |
| an explicit `FAIL()`, `ADD_FAILURE()`, or `SUCCESS()`). | |
| #### Public Methods {#TestPartResult-public} | |
| ##### type {#TestPartResult::type} | |
| `Type TestPartResult::type() const` | |
| Gets the outcome of the test part. | |
| The return type `Type` is an enum defined as follows: | |
| ```cpp | |
| enum Type { | |
| kSuccess, // Succeeded. | |
| kNonFatalFailure, // Failed but the test can continue. | |
| kFatalFailure, // Failed and the test should be terminated. | |
| kSkip // Skipped. | |
| }; | |
| ``` | |
| ##### file_name {#TestPartResult::file_name} | |
| `const char* TestPartResult::file_name() const` | |
| Gets the name of the source file where the test part took place, or `NULL` if | |
| it's unknown. | |
| ##### line_number {#TestPartResult::line_number} | |
| `int TestPartResult::line_number() const` | |
| Gets the line in the source file where the test part took place, or `-1` if it's | |
| unknown. | |
| ##### summary {#TestPartResult::summary} | |
| `const char* TestPartResult::summary() const` | |
| Gets the summary of the failure message. | |
| ##### message {#TestPartResult::message} | |
| `const char* TestPartResult::message() const` | |
| Gets the message associated with the test part. | |
| ##### skipped {#TestPartResult::skipped} | |
| `bool TestPartResult::skipped() const` | |
| Returns true if and only if the test part was skipped. | |
| ##### passed {#TestPartResult::passed} | |
| `bool TestPartResult::passed() const` | |
| Returns true if and only if the test part passed. | |
| ##### nonfatally_failed {#TestPartResult::nonfatally_failed} | |
| `bool TestPartResult::nonfatally_failed() const` | |
| Returns true if and only if the test part non-fatally failed. | |
| ##### fatally_failed {#TestPartResult::fatally_failed} | |
| `bool TestPartResult::fatally_failed() const` | |
| Returns true if and only if the test part fatally failed. | |
| ##### failed {#TestPartResult::failed} | |
| `bool TestPartResult::failed() const` | |
| Returns true if and only if the test part failed. | |
| ### TestProperty {#TestProperty} | |
| `testing::TestProperty` | |
| A copyable object representing a user-specified test property which can be | |
| output as a key/value string pair. | |
| #### Public Methods {#TestProperty-public} | |
| ##### key {#key} | |
| `const char* key() const` | |
| Gets the user-supplied key. | |
| ##### value {#value} | |
| `const char* value() const` | |
| Gets the user-supplied value. | |
| ##### SetValue {#SetValue} | |
| `void SetValue(const std::string& new_value)` | |
| Sets a new value, overriding the previous one. | |
| ### TestResult {#TestResult} | |
| `testing::TestResult` | |
| Contains information about the result of a single test. | |
| `TestResult` is not copyable. | |
| #### Public Methods {#TestResult-public} | |
| ##### total_part_count {#TestResult::total_part_count} | |
| `int TestResult::total_part_count() const` | |
| Gets the number of all test parts. This is the sum of the number of successful | |
| test parts and the number of failed test parts. | |
| ##### test_property_count {#TestResult::test_property_count} | |
| `int TestResult::test_property_count() const` | |
| Returns the number of test properties. | |
| ##### Passed {#TestResult::Passed} | |
| `bool TestResult::Passed() const` | |
| Returns true if and only if the test passed (i.e. no test part failed). | |
| ##### Skipped {#TestResult::Skipped} | |
| `bool TestResult::Skipped() const` | |
| Returns true if and only if the test was skipped. | |
| ##### Failed {#TestResult::Failed} | |
| `bool TestResult::Failed() const` | |
| Returns true if and only if the test failed. | |
| ##### HasFatalFailure {#TestResult::HasFatalFailure} | |
| `bool TestResult::HasFatalFailure() const` | |
| Returns true if and only if the test fatally failed. | |
| ##### HasNonfatalFailure {#TestResult::HasNonfatalFailure} | |
| `bool TestResult::HasNonfatalFailure() const` | |
| Returns true if and only if the test has a non-fatal failure. | |
| ##### elapsed_time {#TestResult::elapsed_time} | |
| `TimeInMillis TestResult::elapsed_time() const` | |
| Returns the elapsed time, in milliseconds. | |
| ##### start_timestamp {#TestResult::start_timestamp} | |
| `TimeInMillis TestResult::start_timestamp() const` | |
| Gets the time of the test case start, in ms from the start of the UNIX epoch. | |
| ##### GetTestPartResult {#TestResult::GetTestPartResult} | |
| `const TestPartResult& TestResult::GetTestPartResult(int i) const` | |
| Returns the [`TestPartResult`](#TestPartResult) for the `i`-th test part result | |
| among all the results. `i` can range from 0 to `total_part_count() - 1`. If `i` | |
| is not in that range, aborts the program. | |
| ##### GetTestProperty {#TestResult::GetTestProperty} | |
| `const TestProperty& TestResult::GetTestProperty(int i) const` | |
| Returns the [`TestProperty`](#TestProperty) object for the `i`-th test property. | |
| `i` can range from 0 to `test_property_count() - 1`. If `i` is not in that | |
| range, aborts the program. | |
| ### TimeInMillis {#TimeInMillis} | |
| `testing::TimeInMillis` | |
| An integer type representing time in milliseconds. | |
| ### Types {#Types} | |
| `testing::Types<T...>` | |
| Represents a list of types for use in typed tests and type-parameterized tests. | |
| The template argument `T...` can be any number of types, for example: | |
| ``` | |
| testing::Types<char, int, unsigned int> | |
| ``` | |
| See [Typed Tests](../advanced.md#typed-tests) and | |
| [Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more | |
| information. | |
| ### WithParamInterface {#WithParamInterface} | |
| `testing::WithParamInterface<T>` | |
| The pure interface class that all value-parameterized tests inherit from. | |
| A value-parameterized test fixture class must inherit from both [`Test`](#Test) | |
| and `WithParamInterface`. In most cases that just means inheriting from | |
| [`TestWithParam`](#TestWithParam), but more complicated test hierarchies may | |
| need to inherit from `Test` and `WithParamInterface` at different levels. | |
| This interface defines the type alias `ParamType` for the parameter type `T` and | |
| has support for accessing the test parameter value via the `GetParam()` method: | |
| ``` | |
| static const ParamType& GetParam() | |
| ``` | |
| For more information, see | |
| [Value-Parameterized Tests](../advanced.md#value-parameterized-tests). | |
| ## Functions | |
| GoogleTest defines the following functions to help with writing and running | |
| tests. | |
| ### InitGoogleTest {#InitGoogleTest} | |
| `void testing::InitGoogleTest(int* argc, char** argv)` \ | |
| `void testing::InitGoogleTest(int* argc, wchar_t** argv)` \ | |
| `void testing::InitGoogleTest()` | |
| Initializes GoogleTest. This must be called before calling | |
| [`RUN_ALL_TESTS()`](#RUN_ALL_TESTS). In particular, it parses the command line | |
| for the flags that GoogleTest recognizes. Whenever a GoogleTest flag is seen, it | |
| is removed from `argv`, and `*argc` is decremented. Keep in mind that `argv` | |
| must terminate with a `NULL` pointer (i.e. `argv[argc]` is `NULL`), which is | |
| already the case with the default `argv` passed to `main`. | |
| No value is returned. Instead, the GoogleTest flag variables are updated. | |
| The `InitGoogleTest(int* argc, wchar_t** argv)` overload can be used in Windows | |
| programs compiled in `UNICODE` mode. | |
| The argument-less `InitGoogleTest()` overload can be used on Arduino/embedded | |
| platforms where there is no `argc`/`argv`. | |
| ### AddGlobalTestEnvironment {#AddGlobalTestEnvironment} | |
| `Environment* testing::AddGlobalTestEnvironment(Environment* env)` | |
| Adds a test environment to the test program. Must be called before | |
| [`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is called. See | |
| [Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down) for | |
| more information. | |
| See also [`Environment`](#Environment). | |
| ### RegisterTest {#RegisterTest} | |
| ```cpp | |
| template <typename Factory> | |
| TestInfo* testing::RegisterTest(const char* test_suite_name, const char* test_name, | |
| const char* type_param, const char* value_param, | |
| const char* file, int line, Factory factory) | |
| ``` | |
| Dynamically registers a test with the framework. | |
| The `factory` argument is a factory callable (move-constructible) object or | |
| function pointer that creates a new instance of the `Test` object. It handles | |
| ownership to the caller. The signature of the callable is `Fixture*()`, where | |
| `Fixture` is the test fixture class for the test. All tests registered with the | |
| same `test_suite_name` must return the same fixture type. This is checked at | |
| runtime. | |
| The framework will infer the fixture class from the factory and will call the | |
| `SetUpTestSuite` and `TearDownTestSuite` methods for it. | |
| Must be called before [`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is invoked, otherwise | |
| behavior is undefined. | |
| See | |
| [Registering tests programmatically](../advanced.md#registering-tests-programmatically) | |
| for more information. | |
| ### RUN_ALL_TESTS {#RUN_ALL_TESTS} | |
| `int RUN_ALL_TESTS()` | |
| Use this function in `main()` to run all tests. It returns `0` if all tests are | |
| successful, or `1` otherwise. | |
| `RUN_ALL_TESTS()` should be invoked after the command line has been parsed by | |
| [`InitGoogleTest()`](#InitGoogleTest). | |
| This function was formerly a macro; thus, it is in the global namespace and has | |
| an all-caps name. | |
| ### AssertionSuccess {#AssertionSuccess} | |
| `AssertionResult testing::AssertionSuccess()` | |
| Creates a successful assertion result. See | |
| [`AssertionResult`](#AssertionResult). | |
| ### AssertionFailure {#AssertionFailure} | |
| `AssertionResult testing::AssertionFailure()` | |
| Creates a failed assertion result. Use the `<<` operator to store a failure | |
| message: | |
| ```cpp | |
| testing::AssertionFailure() << "My failure message"; | |
| ``` | |
| See [`AssertionResult`](#AssertionResult). | |
| ### StaticAssertTypeEq {#StaticAssertTypeEq} | |
| `testing::StaticAssertTypeEq<T1, T2>()` | |
| Compile-time assertion for type equality. Compiles if and only if `T1` and `T2` | |
| are the same type. The value it returns is irrelevant. | |
| See [Type Assertions](../advanced.md#type-assertions) for more information. | |
| ### PrintToString {#PrintToString} | |
| `std::string testing::PrintToString(x)` | |
| Prints any value `x` using GoogleTest's value printer. | |
| See | |
| [Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values) | |
| for more information. | |
| ### PrintToStringParamName {#PrintToStringParamName} | |
| `std::string testing::PrintToStringParamName(TestParamInfo<T>& info)` | |
| A built-in parameterized test name generator which returns the result of | |
| [`PrintToString`](#PrintToString) called on `info.param`. Does not work when the | |
| test parameter is a `std::string` or C string. See | |
| [Specifying Names for Value-Parameterized Test Parameters](../advanced.md#specifying-names-for-value-parameterized-test-parameters) | |
| for more information. | |
| See also [`TestParamInfo`](#TestParamInfo) and | |
| [`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). |