4

HippoMock を使用して、クラスの一部だけをモックできるかどうかを知りたいです。

class aClass
{
public:
    virtual void method1() = 0;

    void method2(){ 
        do
            doSomething;      // not a functon 
            method1();
        while(condition);
    };
};

メソッド2をテストするために、メソッド1だけをモックしたいと思います

明らかに私は HippoMock を使用しており、method2 にバグがあるため、それを修正して再発しないことを確認するために単体テストを行いました。しかし、私はそれを行う方法を見つけられません。

私はこれを試します

TEST(testMethod2)
{
    MockRepository mock;
    aClass *obj = mock.Mock<aClass>();
    mock.ExpectCall(obj , CPXDetector::method1);
    obj->method2();
}

ネイティブ cpp に解決策はありますか? 他のモックフレームワークで?

どうもありがとう

アンブロワーズ・プティジュネ

4

1 に答える 1

1

この回答には 2 つの部分があります。まず、はい、これを行うのは簡単です。2 つ目は、このようにテストを構造化する必要がある場合、多くの場合、残念なクラス デザインが発生することです。これは、クラス デザインを適切に修正できない場合に、レガシー ソフトウェアをテストする必要がある場合によく発生します。

これをテストする方法は?私が覚えている限り、これにはヒッポモックを使用できますが、しばらく使用していないため、頭の中でどのように行うかを覚えていません. 別のフレームワークを使用している場合でも、解決策を求められたため、ヒッポモックを使用する代わりに直接的なアプローチを使用することをお勧めします。

class bClass : public aClass
{
    int _counter;
public:
    bClass() : aClass(), _counter(0){}
    void method1() { _counter++; }
    int NumCallsToMethod1() const { return _counter; }
};

TEST(testMethod2)
{
    bClass testThis;
    testThis.method2();
    TEST_EQUALS(1,testThis.NumCallsToMethod1());
}

または、次method1の場合const:

class bClass : public aClass
{
    mutable int _counter;
public:
    bClass() : aClass(), _counter(0){}
    void method1() const { _counter++; }
    int NumCallsToMethod1() const { return _counter; }
};
于 2014-02-25T11:09:37.920 に答える