在c++单元测试器中自定义断言

Custom assertions in a c++ unit tester

本文关键字:自定义 断言 c++ 单元测试      更新时间:2023-10-16

我正在做一个c++单元测试器(主要是作为实践),并且对我的实现有一些问题。我希望能够重载我的自定义断言,所以我决定将它们作为函数实现,并将它们包装在命名空间中。

我目前的实现如下:

Tester.h
#include <string>
#define INFO __FILE__, __LINE__
namespace Tester
{
    void Assert(char const* input, char const* file_path, int line_number, std::string error_message);
    ...more overloaded Asserts and some Log functions...
}

当我调用函数时:

#include "Tester.h"
...code...
    Tester::Assert(false, INFO, "Some message");
...code...

这工作,但我不确定'INFO'宏是好的做法。我欢迎所有关于这个实现的建议和指示,如果它没有意义,我应该做一些完全不同的事情,请随时告诉我;)

INFO作为宏似乎完全没问题。我更喜欢的另一种选择是使用宏

#define TEST_ASSERT(condition, message) Tester::Asssert(condition, __FILE__, __LINE__, message)

之类的。

如果你有不同数量的参数,像这样可以工作:

#define TEST_ASSERT(condition, ...) Tester::Asssert(condition, __FILE__, __LINE__, __VA_ARGS__)

假设你的编译器足够新,也就是说。