13

Google Test を使用して C++ プロジェクトをテストしています。ただし、場合によっては、必要なデータをロードするために argc および argv へのアクセスが必要になります。

メソッドではmain()、初期化時に argc と argv がテストのコンストラクタに渡されます。

testing::InitGoogleTest(&argc, argv);

後でテストでそれらにアクセスするにはどうすればよいですか?

TEST(SomeClass, myTest)
{
  // Here I would need to have access to argc and argv
}
4

3 に答える 3

12

私はGoogleのテストフレームワークを知らないので、これを行うためのより良い方法があるかもしれませんが、これでうまくいくはずです:

//---------------------------------------------
// some_header.h
extern int my_argc;
extern char** my_argv;
// eof
//---------------------------------------------

//---------------------------------------------
// main.cpp
int my_argc;
char** my_argv;

int main(int argc, char** argv)
{    
  ::testing::InitGoogleTest(&argc, argv);
  my_argc = argc;
  my_argv = argv;
  return RUN_ALL_TESTS();
}
// eof
//---------------------------------------------

//---------------------------------------------
// test.cpp
#include "some_header.h"

TEST(SomeClass, myTest)
{
  // Here you can access my_argc and my_argv
}
// eof
//---------------------------------------------

グローバルは見栄えがよくありませんが、テスト フレームワークしかなく、テスト フレームワークからデータをトンネリングすることができない場合は、グローバルがmain()仕事をします。

于 2011-03-10T15:48:27.293 に答える
1

Visual Studioを使用してWindowsで実行している場合、それらは__argcおよび__argvで使用できます。

于 2011-03-11T13:23:56.463 に答える
-3

テスト実行可能ファイルへのコマンド ライン引数は、テスト フレームワーク用であり、テスト用ではありません。それらを使用して、--gtest_output--gtest_repeatまたはのようなものを設定します--gtest_filter。テストは何よりもまず再現可能である必要がありますが、「正しい」パラメーターを使用している誰かに依存している場合はそうではありません。

とにかく、あなたは何を達成しようとしていますか?


Post Scriptum (この回答に対する 5 回目の反対票を祝って):

私がここで提唱しようとしている考えは、テストを正常に実行するために必要なすべてのものをバージョン管理されたソースに含める必要があるということです。「必要なデータをロードする」必要がある場合は、それもテストソースに自己完結型である必要があります。構成が動的である場合 (@totowtwo が述べたように IP アドレスなど)、それを把握する方法をプログラムします。

コマンド ライン オプションは、アドホック構成用です。テストの特定のサブセットのみを実行するデバッグ レベル。テスト フレームワークによって処理され、テスト コードによるコマンド ライン解析を必要としないものなど。

テスト用のコマンド ライン オプションは、通常、ビルド設定で構成されます。つまり、バージョン管理の外です。テスト自体は、環境の外でも常にブラック ボックスとして実行できる必要があり、それらを実行するための「正しい」コマンド ライン オプションを理解しなければならないことは有害です。(セットアップ全体を失い、再構築する必要があると考えてください。「正しい」コマンド ライン オプションを思い出せなくても、テストを機能させたいと思うでしょう?)

于 2011-03-10T15:35:15.403 に答える