如何使 catch2 运行驻留在静态库中的测试?

Ela*_*oni 5 c++ unit-testing visual-c++ catch-unit-test catch2

我通常使用catch2的工作流程是拥有一个包含所有测试用例和测试“运行程序”的控制台应用程序。

例如:

file1.cpp、file2.cpp 包含测试:

#include <catch2/catch.hpp>

TEST_CASE("test", "[test]")
{
    CHECK(true);
}
Run Code Online (Sandbox Code Playgroud)

单个文件 main.cpp 将包含运行程序代码:

#define CATCH_CONFIG_RUNNER
#include <catch2/catch.hpp>

int main(int argc, char* argv[])
{
    return Catch::Session().run(argc, argv); // run tests
}
Run Code Online (Sandbox Code Playgroud)

为了减少编译时间,我尝试将包含测试的所有文件(file1、file2 等)移动到单独的静态库项目(Visual Studio)。

但这样做之后,catch 找不到任何测试用例:

catch main started..
Filters: [test]
===============================================================================
No tests ran
Run Code Online (Sandbox Code Playgroud)

我尝试将运行程序代码放入静态库中的函数中,但这没有帮助。

问题:

  • catch 究竟如何找到它的测试用例?
  • 为什么会失败?
  • 我该如何修复它?