Из TEST_F
документации:
Первый параметр - это имя класса тестовых приборов, которое также удваивается как имя тестового примера.
Первый параметриспользуется как часть имени класса теста, поэтому размещение в нем составного идентификатора приводит к расширению макроса TEST_F(A::B::MyFixture, Test1)
до недопустимого кода:
class A::B::MyFixture_Test1_Test: public A::B::MyFixture
{
public: A::B::MyFixture_Test1_Test()
{
}
private: virtual void TestBody();
static ::testing::TestInfo* const test_info_;
A::B::MyFixture_Test1_Test(A::B::MyFixture_Test1_Test const &) = delete;
void operator=(A::B::MyFixture_Test1_Test const &) = delete;
};
::testing::TestInfo* const A::B::MyFixture_Test1_Test::test_info_ = ::testing::internal::MakeAndRegisterTestInfo
(
"A::B::MyFixture"
, "Test1"
, nullptr
, nullptr
, ::testing::internal::CodeLocation
(
"d:\\projects\\googletest-master\\googletest\\src\\gtest-all.cc", 60
)
, (::testing::internal::GetTypeId<A::B::MyFixture>())
, A::B::MyFixture::SetUpTestCase
, A::B::MyFixture::TearDownTestCase
, new ::testing::internal::TestFactoryImpl<A::B::MyFixture_Test1_Test>
);
void A::B::MyFixture_Test1_Test::TestBody()
{
}
Это один из многих недостатков основанных на макросах структур модульных тестов.
Если вы хотите использовать осветитель из другого пространства имен, вам нужно будет перенести его имя в текущее пространство имен, а затем использовать незавершенное имя в макросе:
using A::B::MyFixture;
TEST_F(MyFixture, Test1)
{
…