10

私は最近、テスト手順を支援するためにグーグルテストを使い始めました。それはうまく機能していますが、今私のテストケースは成長しています...

#include <gtest/gtest.h>

TEST(MyTest, FirstTest) {
    // stuff
};

TEST(MyTest, SecondTest) {
    // stuff
};

TEST(MyTest, ThirdTest) {
    // stuff
};

int main(int argc, char* argv[]) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
};

プログラムのドキュメントとは別に、すべてのテスト用に自動生成されたドキュメントを作成したいと思います。その目的のために私は一般的にdoxygenを使用しますが、グーグルテストはマクロを使用し、doxygenがそれをどのように処理できるかは不明です。より正確には、

#define TEST(test_case_name, test_name)\
  GTEST_TEST_(test_case_name, test_name, \
             ::testing::Test, ::testing::internal::GetTestTypeId())

私は試した

/** 
* @def TEST(MyTest, FirstTest)
* @brief My first test
*/
TEST(MyTest, FirstTest) {
    // stuff
};

しかし、それはdoxygenで何の出力も生成しません...

4

2 に答える 2

10

どうやらあなたの質問は、ロブ・ケネディの答えで答えられたようです。しかし、それにもかかわらず、私はまったく異なるアプローチを提供したいと考えています。

RecordProperty()gtestのメソッドを使用してdescription、テスト ログ XML に追加の属性を作成し、テスト メソッドが行っていることの簡単な説明を文字列リテラルとして渡します。TEST_DESCRIPTIONテストケースの最初のステートメントとして呼び出されるはずの、という名前の小さなマクロを作成しました。

#define TEST_DESCRIPTION(desc) RecordProperty("description", desc)

TEST(MyTest, SecondTest) {
    TEST_DESCRIPTION("This test does 'stuff'");
    // stuff
};

さらに、XML テストログ出力から HTML テスト レポートを作成し、この@description属性を表示する単純な XSLT 変換があります。

この方法の欠点は、無効なテストでは description 属性が表示RecordProperty()されないことです。

私の上司がユニットテストのテストケースの説明を求めたので、すべてが発明されました。これらを別のツールで説明したくありませんでした (たとえば、要件分析用の Polarion があり、そこでテストシナリオを説明することもできます)。すぐに矛盾するようになります。

しかし、doxygen は、テスト メソッドからの呼び出し参照を表示できるため、追加の利点を提供する可能性があります。

于 2012-08-21T17:35:30.610 に答える
8

を使用しています@defが、それはマクロ定義のコマンドです。このコマンドの後には#defineステートメントが続かないため、Doxygen はそれを無視します。関数の Doxygen コマンドは@fnであるため、代わりにそれを使用してください。

また、Doxygen がグローバル関数をドキュメント化するには、エンクロージングファイルもドキュメント化する必要があることに注意してください。

于 2012-08-21T17:33:57.600 に答える