13

C++ コードの単体テストにgmockを使用しています。私はgtest フレームワークを使用していません。Visual Studio 2008 の組み込みテスト フレームワークを使用しています。

今私の問題は、実際のクラスの模擬クラスを手動で記述して単体テストを行う必要があることです。たとえば、5 つの関数を持つ A クラスがある場合、5 つの関数を持つ MockAClass を作成する必要があります。これらのクラスを自動的に生成する方法はありますか?

class AClass
{
public:
    virtual int AFunction()
    {
        return 5;
    }
    virtual int AFunctionWithArguments(int x)
    {
        return x;
    }



class MockAClass : public AClass
{
public:
    MOCK_METHOD0(AFucntion, int());
    MOCK_METHOD1(AFunctionWithArgument, int(int x));
};
4

2 に答える 2

20

これを行うのに役立つツールが google モック プロジェクトにバンドルされています。ただし、このツールには python をインストールする必要があると思いますが、Windows 環境でどのように機能するかはわかりません。また、生成されたファイルを完全に機能させるには、少し調整が必要な場合があることもわかりました。

ドキュメントからの情報は次のとおりです。

ヒント: これでも手間がかかる場合は、Google Mock の scripts/generator/ ディレクトリ ( cppcleanプロジェクト提供) にある gmock_gen.py ツールが便利です。このコマンドライン ツールを使用するには、Python 2.4 がインストールされている必要があります。C++ ファイルとその中で定義されている抽象クラスの名前を指定すると、モック クラスの定義が出力されます。C++ 言語は複雑なため、このスクリプトは常に機能するとは限りませんが、機能する場合は非常に便利です。詳細については、ユーザー ドキュメントを参照してください。

このスクリプトの新しいローカライズは次のとおりです。

于 2012-02-13T07:45:34.963 に答える
3

免責事項: 私Typemock で働いていました

別のツールの使用を検討しましたか?
Typemock にはIsolator++というツールがあり、「モック クラス」を記述する必要はありません。

TEST_F(IsolatorTests, SomeTest) 
{
      AClass* fakeclass = FAKE(AClass);
      WHEN_CALLED(fakeclass->AFunction()).Return(10);

      ASSERT_EQ(10, fakeclass.AFunction()); 
}

詳細については、このページについてをご覧ください。

于 2012-02-13T07:22:23.577 に答える