1

我正在开发一个 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...

这行得通,但我不确定“信息”宏是否是好的做法。我欢迎有关此实现的所有建议和指示,如果它没有意义,请随时告诉我,我应该做一些完全不同的事情;)

4

1 回答 1

0

INFO 作为一个宏似乎非常好。我更喜欢的另一种选择是有一个宏

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

或类似的东西。

如果你有不同数量的参数,这样的事情可能会起作用:

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

假设您的编译器足够新,那就是。

于 2012-12-23T22:21:59.463 回答