Тест на параметризацию и совместное использование ресурсов в googletest

Используя каркас googletest, я пытаюсь создать унаследованный класс фикстур, чтобы провести тест как с параметризованными, так и с общими ресурсами.

class FixtDBadminConnShared : public ::testing::Test {
  public:
    static void SetUpTestCase() {
      shared_conn_ = new ::DB::DB_connection();
    }
    static void TearDownTestCase() {
      delete shared_conn_;
    }
    static ::DB::DB_connection * shared_conn_;
    };
::DB::DB_connection * FixtDBadminConnShared::shared_conn_ = nullptr;

class FixtDBadminConnExec :public FixtDBadminConnShared, public ::testing::TestWithParam<string> 
  {
  protected:
    using FixtDBadminConnShared::SetUpTestCase;
    using FixtDBadminConnShared::TearDownTestCase;

    void SetUp() override {
      query_ = GetParam();
    }
    string query_;
  };       

Попытка вызвать тест:

TEST_P(FixtDBadminConnExec, SelectWithoutParam) {
 //do smth
}
INSTANTIATE_TEST_CASE_P(QueriesOrbital0param, FixtDBadminConnExec,
::testing::Values( string{ "SELECT * from my_table;" }));

Я получаю следующую ошибку

Error   C2594   'return': ambiguous conversions from 'FixtDBadminConnExec_SelectWithoutParam_Test *' to 'testing::Test *'   gtest_mytest    e:\libs\googletest\googletest\include\gtest\internal\gtest-param-util.h 415 

Вот часть gtest-param-util.h с 415 строкой при возврате нового TestClass ():

template <class TestClass>
class ParameterizedTestFactory : public TestFactoryBase {
 public:
  typedef typename TestClass::ParamType ParamType;
  explicit ParameterizedTestFactory(ParamType parameter) :
      parameter_(parameter) {}
  virtual Test* CreateTest() {
    TestClass::SetParam(&parameter_);
    return new TestClass();
  }

 private:
  const ParamType parameter_;

  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory);
};

Таким образом, я полагаю, что проблема также может заключаться в том, что я хочу использовать как параметризованный тест (макросы TEST_P), так и тест с общими ресурсами (макросы TEST_F). Как я могу это сделать, если можно?

1 ответ

Ваша проблема здесь в том, что TestWithParam<> наследует от testing::Test и происходит неоднозначное преобразование. Вместо этого наследуйте от WithParamInterface<>

Другие вопросы по тегам