C++単体テストTIPS ~みんなともだち~

テストコード書いてると対象のクラスのprivateメンバの値が知りたいときがよくある。

class MyTest;
#define private \
    friend class ::MyTest; private
#include <TargetClass.h>
#include <cxxtest/TestSuite.h>

class MyTest : public CxxTest::TestSuite {
public:
    void testHoge() {
        auto p = new TargetClass();
        TS_ASSERT_EQUAL(100, p->privateMember_); // friendになってるのでprivateにもアクセスし放題
    }
};

こんな感じ。

最初はprivateをpublicに置き換えようとしたが、そうするとprivateメソッドのマングルが変わってしまいリンクエラーになったのでfriendを使うことにした。

テストが捗る。