3

私はC++11プロジェクトを持っており、多くのgoogletestユニットテストは次のようになっています。

TEST_F(GTest, testSomething) {
    int64_t n = 42;
    // following code depends on input size n
    ...
}

各テストでローカル定数を使用するのではなく、n1つの場所、できればコマンドラインから入力サイズを設定できるようにしたいと思います。

./RunMyProgram --gtest_filter=* --n=1000

次のmainようになります。

int main(int argc, char **argv) {

     // TODO: parse command line argument n here

    INFO("=== starting unit tests ===");

    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();

}

?テスト関数で何を置き換える必要がありますか?

TEST_F(GTest, testSomething) {
    int64_t n = ?;
    // following code depends on input size n
    ...
}
4

3 に答える 3

5

まず、複数のテスト関数で同じ値/パラメーターを使用する場合は、フィクスチャの使用を検討してください。

あなたが私のためにやろうとしていることは、「値パラメータ化されたテスト」のように見えます。私はそれがテストの世界ではかなり一般的だと思います、そして-tadaa、Google Testはその高度なガイドに ValueParameterizedTest」と呼ばれる章を持っています(そしてああ、それはフィクスチャを使用します)。

于 2013-01-16T14:55:21.393 に答える
1

gtestを使用している場合は、gflagsも調べることができます。次にmain.cpp、コマンドライン引数を定義できます。

DEFINE_int64(n, 0, "some input arg");

次に、テストコードで次のように宣言できます。

DECLARE_int64(n);

テストでは、次のように使用します。

int64_t n = FLAGS_n;

もちろん、フラグを手動で解析したい場合は、main.cpp自分で定義することができます。

int64_t FLAGS_n;

そして、それをテストファイルで宣言します。

extern int64_t FLAGS_n;
于 2013-01-16T14:58:17.473 に答える
0

これをそのように行うことはできません。コマンドライン引数を自分で解析し(さらにInitGoogleTest)、グローバル変数などを使用して値を指定する必要があります。

于 2013-01-16T14:45:23.310 に答える