Back to Cmake

add_test

Help/command/add_test.rst

4.3.24.0 KB
Original Source

add_test

Add a test to the project to be run by :manual:ctest(1).

.. code-block:: cmake

add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS])

Adds a test called <name>. The test name may contain arbitrary characters, expressed as a :ref:Quoted Argument or :ref:Bracket Argument if necessary. See policy :policy:CMP0110.

CMake only generates tests if the :command:enable_testing command has been invoked. The :module:CTest module invokes enable_testing automatically unless :variable:BUILD_TESTING is set to OFF.

Tests added with the add_test(NAME) signature support using :manual:generator expressions <cmake-generator-expressions(7)> in test properties set by :command:set_property(TEST) or :command:set_tests_properties. Test properties may only be set in the directory the test is created in.

add_test options are:

COMMAND Specify the test command-line.

If <command> specifies an executable target created by :command:add_executable:

  • It will automatically be replaced by the location of the executable created at build time.

  • .. versionadded:: 3.3

    The target's :prop_tgt:CROSSCOMPILING_EMULATOR, if set, will be used to run the command on the host::

    <emulator> <command>
    

    .. versionchanged:: 3.29

    The emulator is used only when
    :variable:`cross-compiling <CMAKE_CROSSCOMPILING>`.
    See policy :policy:`CMP0158`.
    
  • .. versionadded:: 3.29

    The target's :prop_tgt:TEST_LAUNCHER, if set, will be used to launch the command::

    <launcher> <command>
    

    If the :prop_tgt:CROSSCOMPILING_EMULATOR is also set, both are used::

    <launcher> <emulator> <command>
    

The command may be specified using :manual:generator expressions <cmake-generator-expressions(7)>.

CONFIGURATIONS Restrict execution of the test only to the named configurations.

WORKING_DIRECTORY Set the test property :prop_test:WORKING_DIRECTORY in which to execute the test. If not specified, the test will be run in :variable:CMAKE_CURRENT_BINARY_DIR. The working directory may be specified using :manual:generator expressions <cmake-generator-expressions(7)>.

COMMAND_EXPAND_LISTS .. versionadded:: 3.16

Lists in COMMAND arguments will be expanded, including those created with :manual:generator expressions <cmake-generator-expressions(7)>.

If the test command exits with code 0 the test passes. Non-zero exit code is a "failed" test. The test property :prop_test:WILL_FAIL inverts this logic. Note that system-level test failures such as segmentation faults or heap errors will still fail the test even if WILL_FAIL is true. Output written to stdout or stderr is captured by :manual:ctest(1) and only affects the pass/fail status via the :prop_test:PASS_REGULAR_EXPRESSION, :prop_test:FAIL_REGULAR_EXPRESSION, or :prop_test:SKIP_REGULAR_EXPRESSION test properties.

.. versionadded:: 3.16 Added :prop_test:SKIP_REGULAR_EXPRESSION property.

Example usage:

.. code-block:: cmake

add_test(NAME mytest COMMAND testDriver --config $<CONFIG> --exe $<TARGET_FILE:myexe>)

This creates a test mytest whose command runs a testDriver tool passing the configuration name and the full path to the executable file produced by target myexe.


The command syntax above is recommended over the older, less flexible form:

.. code-block:: cmake

add_test(<name> <command> [<arg>...])

Add a test called <name> with the given command-line.

Unlike the above NAME signature, target names are not supported in the command-line. Furthermore, tests added with this signature do not support :manual:generator expressions <cmake-generator-expressions(7)> in the command-line or test properties, and the :prop_tgt:TEST_LAUNCHER and :prop_tgt:CROSSCOMPILING_EMULATOR target properties are not supported.