2

QT で自分のプロジェクトのテスト クラスを実装しています。すべてのパブリック関数のテストを追加しましたが、テストに含めたいプライベート関数がいくつかあります。

これらはプライベートメンバー関数であるため、明らかにこれは機能しませんが、テストケースからそれらにアクセスしたいという理由でこれをバイパスできるかどうか疑問に思いました。テストが機能するようにコードを変更したくありません関数を非公開にするのが好きですが、それらをテストできるようにしたいです。

これが可能かどうか、または関数を保護されたものに変更してからテスト用のクラスを継承する必要があるかどうかについて、誰かがアイデアを持っているかどうか疑問に思っていますか?

4

2 に答える 2

2

パブリック関数のみを単体テストするのが一般的ですが、テスト クラスを元のクラスのフレンドとして作成できます。そんな感じ:

フレンドの宣言は、#define UNIT_TESTフラグ内にある必要があります。

#include <iostream>

class ToTestClass 
{
 #ifdef UNIT_TEST
    // ToTestClass declares TesterClass as a friend.
    friend class TesterClass;
 #endif

private:
    void privateMethod()
    {
        std::cout << "hey there" << std::endl;
    }
};

class TesterClass
{
public:
    TesterClass()
    {
        ToTestClass  totest;
        // TesterClass now has access to ToTestClass's private members and methods.
        totest.privateMethod();
    }
};

int main()
{
    TesterClass tester;
    return 0;
}
于 2013-04-29T10:16:10.803 に答える