获取单元测试库的断言函数的函数名称 (__FUNCTION__)

Getting the function name (__FUNCTION__) for my unit test library's assert function

本文关键字:函数 单元测试 FUNCTION 断言 获取      更新时间:2023-10-16

我正在编写一个单元测试库,我需要在断言期间记录测试函数的名称,如下所示:

struct my_test_case : public unit_test::test {
    void some_test()
    {
        assert_test(false, "test failed.");
    }
};

当我运行测试用例时,我希望产生如下输出:

ASSERTION FAILED (&my_test_case::some_test()): test failed.

我知道有一些方法可以解决这个问题:

  1. __FUNCTION__赋给assert_true()

  2. 定义一个类似ASSERT(a, b)的宏,扩展为assert_true(a, b, __FUNCTION__)

  3. 定义TEST这样的宏来缓存测试函数中的__FUNCTION__

struct my_test_case : public unit_test::test { void some_test() { TEST assert_test(false, "test failed."); } };

但是这些都是容易出错且丑陋的解决方案。这个问题还有别的解决办法吗?

类似(2)或其变体可能是唯一的选择:

__FUNCTION__不是真正的函数或运行时变量,而只存在于编译时;因此,无论您做什么,当您在运行时需要它的值时,您都需要在本地保存该值。