私は今日同様の問題に直面しました。そこでは、テストしている関数に引数として渡されるテストデータで埋める構造体があります。私はこれらの構造体のベクトルが必要で、各構造体を初期化するためのワンライナーメソッドを探していました。
私は構造体のコンストラクタ関数を使用することになりました。これは、質問へのいくつかの回答でも提案されたと思います。
コンストラクターへの引数にパブリックメンバー変数と同じ名前を付けることは、this
ポインターの使用を必要とするため、おそらく悪い習慣です。より良い方法があれば、誰かが編集を提案できます。
typedef struct testdatum_s {
public:
std::string argument1;
std::string argument2;
std::string argument3;
std::string argument4;
int count;
testdatum_s (
std::string argument1,
std::string argument2,
std::string argument3,
std::string argument4,
int count)
{
this->rotation = argument1;
this->tstamp = argument2;
this->auth = argument3;
this->answer = argument4;
this->count = count;
}
} testdatum;
これをテスト関数で使用して、次のようなさまざまな引数でテストされる関数を呼び出します。
std::vector<testdatum> testdata;
testdata.push_back(testdatum("val11", "val12", "val13", "val14", 5));
testdata.push_back(testdatum("val21", "val22", "val23", "val24", 1));
testdata.push_back(testdatum("val31", "val32", "val33", "val34", 7));
for (std::vector<testdatum>::iterator i = testdata.begin(); i != testdata.end(); ++i) {
function_in_test(i->argument1, i->argument2, i->argument3, i->argument4m i->count);
}