Wire Sysio Wire Sysion 1.0.0
|
Contents
CMake target
Automatic test registration
CMake project options
Installing Catch2 from git repository
Because we use CMake to build Catch2, we also provide a couple of integration points for our users.
1) Catch2 exports a (namespaced) CMake target 2) Catch2's repository contains CMake scripts for automatic registration of TEST_CASE
s in CTest
Catch2's CMake build exports an interface target Catch2::Catch2
. Linking against it will add the proper include path and all necessary capabilities to the resulting binary.
This means that if Catch2 has been installed on the system, it should be enough to do:
This target is also provided when Catch2 is used as a subdirectory. Assuming that Catch2 has been cloned to lib/Catch2
:
Catch2's repository also contains two CMake scripts that help users with automatically registering their TEST_CASE
s with CTest. They can be found in the contrib
folder, and are
1) Catch.cmake
(and its dependency CatchAddTests.cmake
) 2) ParseAndAddCatchTests.cmake
If Catch2 has been installed in system, both of these can be used after doing find_package(Catch2 REQUIRED)
. Otherwise you need to add them to your CMake module path.
Catch.cmake
and CatchAddTests.cmake
Catch.cmake
provides function catch_discover_tests
to get tests from a target. This function works by running the resulting executable with --list-test-names-only
flag, and then parsing the output to find all existing tests.
catch_discover_tests
can be given several extra argumets:
TEST_SPEC arg1...
Specifies test cases, wildcarded test cases, tags and tag expressions to pass to the Catch executable alongside the --list-test-names-only
flag.
EXTRA_ARGS arg1...
Any extra arguments to pass on the command line to each test case.
WORKING_DIRECTORY dir
Specifies the directory in which to run the discovered test cases. If this option is not provided, the current binary directory is used.
TEST_PREFIX prefix
Specifies a prefix to be added to the name of each discovered test case. This can be useful when the same test executable is being used in multiple calls to catch_discover_tests()
, with different TEST_SPEC
or EXTRA_ARGS
.
TEST_SUFFIX suffix
Same as TEST_PREFIX
, except it specific the suffix for the test names. Both TEST_PREFIX
and TEST_SUFFIX
can be specified at the same time.
PROPERTIES name1 value1...
Specifies additional properties to be set on all tests discovered by this invocation of catch_discover_tests
.
TEST_LIST var
Make the list of tests available in the variable var
, rather than the default <target>_TESTS
. This can be useful when the same test executable is being used in multiple calls to catch_discover_tests()
. Note that this variable is only available in CTest.
ParseAndAddCatchTests.cmake
ParseAndAddCatchTests
works by parsing all implementation files associated with the provided target, and registering them via CTest's add_test
. This approach has some limitations, such as the fact that commented-out tests will be registered anyway.
ParseAndAddCatchTests
provides some customization points:
PARSE_CATCH_TESTS_VERBOSE
– When ON
, the script prints debug messages. Defaults to OFF
.PARSE_CATCH_TESTS_NO_HIDDEN_TESTS
– When ON
, hidden tests (tests tagged with any of [!hide]
, [.]
or [.foo]
) will not be registered. Defaults to OFF
.PARSE_CATCH_TESTS_ADD_FIXTURE_IN_TEST_NAME
– When ON
, adds fixture class name to the test name in CTest. Defaults to ON
.PARSE_CATCH_TESTS_ADD_TARGET_IN_TEST_NAME
– When ON
, adds target name to the test name in CTest. Defaults to ON
.PARSE_CATCH_TESTS_ADD_TO_CONFIGURE_DEPENDS
– When ON
, adds test file to CMAKE_CONFIGURE_DEPENDS
. This means that the CMake configuration step will be re-ran when the test files change, letting new tests be automatically discovered. Defaults to OFF
.Optionally, one can specify a launching command to run tests by setting the variable OptionalCatchTestLauncher
before calling ParseAndAddCatchTests
. For instance to run some tests using MPI
and other sequentially, one can write
Catch2's CMake project also provides some options for other projects that consume it. These are
CATCH_BUILD_TESTING
– When ON
, Catch2's SelfTest project will be built. Defaults to ON
. Note that Catch2 also obeys BUILD_TESTING
CMake variable, so both of them need to be ON
for the SelfTest to be built, and either of them can be set to OFF
to disable building SelfTest.CATCH_BUILD_EXAMPLES
– When ON
, Catch2's usage examples will be built. Defaults to OFF
.CATCH_INSTALL_DOCS
– When ON
, Catch2's documentation will be included in the installation. Defaults to ON
.CATCH_INSTALL_HELPERS
– When ON
, Catch2's contrib folder will be included in the installation. Defaults to ON
.BUILD_TESTING
– When ON
and the project is not used as a subproject, Catch2's test binary will be built. Defaults to ON
.If you cannot install Catch2 from a package manager (e.g. Ubuntu 16.04 provides catch only in version 1.2.0) you might want to install it from the repository instead. Assuming you have enough rights, you can just install it to the default location, like so:
If you do not have superuser rights, you will also need to specify CMAKE_INSTALL_PREFIX when configuring the build, and then modify your calls to find_package accordingly.