1 つの小さな例外 (2 つのテストに同じ名前を付けることはできません) を除いて、これは正しい方向に進む必要があります。
#define TEST_F2(F1, F2, Name) \
template <struct Fixture> struct MyTester##Name : Fixture { \
void test##Name(); \
}; \
\
TEST_F(MyTester##Name<F1>, Name##1){ test##Name(); } \
TEST_F(MyTester##Name<F2>, Name##2){ test##Name(); } \
\
template <struct Fixture> void MyTester##Name::test##Name()
これは 2 つのテストを呼び出し、それぞれが 2 つのフィクスチャの 1 つから継承するフィクスチャとして MyTester を使用します。do_test は MyTester のメンバーであるため、フィクスチャから継承されたすべてのメンバーにアクセスできます。テスト フレームワークは、テストごとに MyTester オブジェクトを作成し、対応する実際のフィクスチャは基本クラス オブジェクトとして作成されます。他のテストや TEST_F2 の異なる呼び出しとの名前の競合を避けるために、名前をテンプレート名とテスト メソッド名に追加しました。TEST_F マクロ呼び出しには、名前とインデックスが提供されます。私は Google Test を持っていないのでテストしませんでしたが、これらのテスト フレームワークの多くのメカニズムは同様に機能します。