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...

これは機能しますが、「INFO」マクロが適切な方法であるかどうかはわかりません。この実装に関するすべての提案と指針を歓迎します。それが意味をなさない場合や、まったく別のことを行う必要がある場合は、遠慮なく教えてください ;)

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 に答える