1

私は Google Mock を初めて使用し、ドキュメントとオンライン リソースの理解に基づいて、問題の解決策を特定できませんでした。

私は次のクラスを持っています:

class A
{
    public:
        A() { }
        int fun1()
        {
            //Some code
            B b;
            x = b.fun2();
            //Some other code
        }
};
class B
{
    public:
        B() { }
        int fun2()
        {
            //Some code
            y = C::fun3();
            //Some code
        }
};
class C
{
    public:
        static int fun3()
        {
            //Read a file and provide success if a certain pattern is found
        }
};

現在、A::fun1() の Google テストを作成しようとしています。しかし、コードの構造 (すべての呼び出しはオブジェクトを介して行われ、モックなどを初期化できる基本クラスがないため、これを正常にモックできません。

これが現在の形式の Google Mock でモック可能かどうかを誰かが理解するのを手伝ってくれますか? 元のソース コードを変更することは許可されていないことに注意してください。

4

1 に答える 1

2

これを行うことができるのは、テスト対象のクラスが静的インターフェイス (つまり、テンプレート パラメーター) を使用して構成できる場合のみです。詳細については、非仮想メソッドのモックを参照してください。

別の方法として、テスト対象のクラスにラッパー インターフェイスを導入することもできます。これは通常どおりモックできます:具象クラスのモックの代替

コードを変更できない場合、それは不可能です。

UPDATE : longclass Bが内部でインスタンス化されているため、とにかくA::fun1()モックするのは困難です。Bパラメータとして渡す必要があるため、テスト メソッドでインスタンス化を制御できます。

class Bテストのためにビルド環境を偽装し、モックを提供するための宣言と定義を提供することが、実行可能な解決策になる可能性があります。

于 2012-11-07T16:49:41.140 に答える