运行 一个编译单元中的所有 catch2 测试都没有标签定义

Run all catch2 tests in one compile unit without tag definition

我有以下项目结构:

test_main.cc

#define CATCH_CONFIG_MAIN

#include "catch2.hpp"

test1.cc

#include "catch2.hpp"

TEST_CASE("test1", "[test1]") {
  REQUIRE(1 == 1);
}

test2.cc

#include "catch2.hpp"

TEST_CASE("test2", "[test2]") {
  REQUIRE(2 == 2);
}

现在,我可以 运行 所有测试,例如test1 在测试可执行文件 运行 时使用命令行选项 test1

我通常用相同的标签在一个文件中标记所有测试,因为我使用一个文件来组合同一主题的所有测试。因此,使用文件和标签违反了 DRY 原则。

我的问题是有没有办法 运行 在一个文件中定义所有 catch2 测试?

我在文档中发现:

Catch2/command-line.md at devel · catchorg/Catch2 · GitHub

Filenames as tags

-#, --filenames-as-tags

When this option is used then every test is given an additional tag which is formed of the unqualified filename it is found in, with any extension stripped, prefixed with the # character.

So, for example, tests within the file ~\Dev\MyProject\Ferrets.cpp would be tagged [#Ferrets].

看起来像 it works,所以现在只需根据该标签过滤测试。

还有exact example in documentation

...

-# [#somefile]          Matches all tests from the file 'somefile.cpp'