5

Googlecode のグッド プラクティスについて読みました。そして、彼らは正しいですが、私はまだ次のことに興味があります:

いくつかのクラス定義があります。

class A{
   virtual void method_a(){}
};

ご覧のとおり、method_a純粋な viual ではありません

コーディングできますか

class MockA: public A{
    MOCK_METHOD(method_a, void());
};

暗い結果はありませんか?

さらにもっと。MockAmethod_aをオーバーライドできますか?

お気に入り:

class MockA: public A{
    void method_a(){
        // Do something here.
    }
};
4

1 に答える 1

3

さて、私はちょうどテストをしたところ、できるようです。10 個を超えるパラメーターを持ついくつかのクラス関数をテストするために、そのアプローチを使用しています。

Simplifying the Interface without Breaking Existing Codeによると。gmock クックブックより。

例えば:

class SomeClass {
     ...
     virtual void bad_designed_func(int a, ...){ // This functions has up to 12 parameters.
                                                 // The others were omitted for simplicity.
};


class MockSomeClass: public SomeClass {
    ...
    void bad_designed_func(int a, ...){ // This functions recives 12 parameters.
                                        // The others were omitted for simplicity.
        ...   
        test_wat_i_want(a);  // Mock method call. I'm only interest in paramater a.
    }

    MOCK_METHOD1(test_wat_i_want, void(int a));
};

私のコードには、抽象クラスはありません (純粋仮想関数がまったくないことを意味します)。これは推奨されるアプローチではありませんが、レガシー コードを処理するのに役立ちます。

于 2013-11-28T13:21:19.467 に答える