私が達成したいのは、異なる値をテストできるParamaterized Test TEST_P(MyFixtureClass, DoStuff)
です。上記の値は、通常はINSTANTIATE_TEST_CASE_P
に渡される値のような定数ではありません。さらに、私は理想的には、他のフィクスチャクラス内の値を使用したいと考えています。Googleテスト(gtest)でフィクスチャのメンバ値を使用してパラメータ化されたテストを実行するにはどうすればよいですか?
パラメータ化されたテストを作成するときに静的な値の代わりにフィールドを使用する方法はありません。 official documentationはこれをカバーしていないようです - 悲しいことに。
しかし、ここで、この質問にXY-問題を導入することを避けるために同等の擬似コードは次のとおりです。
パラメータ化治具、MyFixture
:
struct MyFixture : OtherFixture, ::testing::WithParamInterface<float>
{
float a;
void SetUp() override
{
a = GetParam();
}
};
OtherFixture
は次のようになります。
struct OtherFixture : testing::Test
{
float a;
float b;
float c;
void SetUp() override
{
a = CalculateSomeFloat();
b = CalculateSomeFloat();
c = CalculateSomeFloat();
}
};
テストケースは、 E:
// This here is the key aspect.
// Basically, I do not want to write a bunch of tests for a, b and c.
// Rather, I'd just test all 3 with this one.
TEST_P(MyFixture, DoStuff)
{
...bunch of tests
}
そして最後に、我々はパラメータ化テストのインスタンスを作成します:
明らかINSTANTIATE_TEST_CASE_P(MyFloatTesting, MyFixture, ::testing::Values(
OtherFixture::a, OtherFixture::b, OtherFixture::c
));
、OtherFixture::a
が不適切であるが、私は継承されたフィクスチャクラス内で、フィールドを参照したい場所、それが示します(またはその問題のための任意のフィクスチャクラス)。
gtestでこれを達成する方法はありますか?必ずしもパラメータ化されたテストを使う必要はありません。同じテストを書く必要を避けるだけで、私は別のオブジェクトに対してうまくいきます。
ご迷惑をおかけして申し訳ありません。
、 'OtherFixtureフロート:: *'。そして、私は「PrintTo」の追加に非常に感謝します。余分なマイルに行ってくれてありがとう。 – Nikita