Тест на параметризацию и совместное использование ресурсов в 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(¶meter_);
return new TestClass();
}
private:
const ParamType parameter_;
GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory);
};
Таким образом, я полагаю, что проблема также может заключаться в том, что я хочу использовать как параметризованный тест (макросы TEST_P), так и тест с общими ресурсами (макросы TEST_F). Как я могу это сделать, если можно?
1 ответ
Ваша проблема здесь в том, что TestWithParam<> наследует от testing::Test и происходит неоднозначное преобразование. Вместо этого наследуйте от WithParamInterface<>