是否有提供当前测试名称的 Catch2 变量?
Is there a Catch2 variable that provides the name of the current test?
我正在使用 Catch2 进行单元测试,我想知道显示当前正在执行的测试名称的 C++ 或环境变量的名称。
有没有办法做到这一点,或者让测试调试代码打印它所在的测试的名称是一种不好的形式运行?理想情况下,我想使用 CAPTURE 宏打印它。
我想这样做的原因是我有很多 Catch2 测试,其中一些会生成大量输出。有些生成完全相同的输出。有些生成的输出 应该 相同但有时却不同。输出不是在单元测试的主体中生成的,而是在调用的函数中生成的。所以我希望能够根据生成它的宏来标记输出。
我想这样做的一种方法是使用将名称存储到全局变量或环境变量中的脚手架。
我认为您的脚手架想法是可行的。我还没有找到任何可以 return 名称而无需定义额外变量的宏。
当涉及到正在为测试用例实例化的class时:
struct AutoReg : Detail::NonCopyable {
AutoReg( Detail::unique_ptr<ITestInvoker> invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags ) noexcept;
};
它没有任何成员可以保存测试信息,即使有,您也必须跟踪它为每个测试指定的唯一名称。
看起来 AutoReg
只是修改了一个名为 RegistryHub
的 class 的成员,它以向量形式保存测试信息。
在我看来,此时您最好自己跟踪测试名称。
我正在使用 Catch2 进行单元测试,我想知道显示当前正在执行的测试名称的 C++ 或环境变量的名称。
有没有办法做到这一点,或者让测试调试代码打印它所在的测试的名称是一种不好的形式运行?理想情况下,我想使用 CAPTURE 宏打印它。
我想这样做的原因是我有很多 Catch2 测试,其中一些会生成大量输出。有些生成完全相同的输出。有些生成的输出 应该 相同但有时却不同。输出不是在单元测试的主体中生成的,而是在调用的函数中生成的。所以我希望能够根据生成它的宏来标记输出。
我想这样做的一种方法是使用将名称存储到全局变量或环境变量中的脚手架。
我认为您的脚手架想法是可行的。我还没有找到任何可以 return 名称而无需定义额外变量的宏。
当涉及到正在为测试用例实例化的class时:
struct AutoReg : Detail::NonCopyable {
AutoReg( Detail::unique_ptr<ITestInvoker> invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags ) noexcept;
};
它没有任何成员可以保存测试信息,即使有,您也必须跟踪它为每个测试指定的唯一名称。
看起来 AutoReg
只是修改了一个名为 RegistryHub
的 class 的成员,它以向量形式保存测试信息。
在我看来,此时您最好自己跟踪测试名称。