C++ GTEST-限定名称不在';之前命名类:';代币

C++ GTEST-限定名称不在';之前命名类:';代币,c++,googletest,gmock,C++,Googletest,Gmock,下面是一个示例代码: #include <gtest/gtest.h> #include <gmock/gmock.h> namespace A { namespace B { struct MyFixture: public ::testing::Test { }; }} TEST_F(A::B::MyFixture, Test1) { } int main(int argc, char** argv) { ::testing::InitGoogle

下面是一个示例代码:

#include <gtest/gtest.h>
#include <gmock/gmock.h>

namespace A { namespace B {

struct MyFixture: public ::testing::Test
{
};

}}

TEST_F(A::B::MyFixture, Test1)
{

}

int main(int argc, char** argv)
{
    ::testing::InitGoogleMock(&argc, argv);
    return RUN_ALL_TESTS();
}

如何解决这个问题?测试必须与夹具位于同一名称空间吗?

来自
测试
文档:

第一个参数是测试夹具类的名称,它也兼作测试用例名称

第一个参数用作测试类名的一部分,因此将复合标识符放入其中会使
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()
{

}

可能是的。只需将其放在名称空间中。这就是它的所在。你应该发布完整的错误消息。甚至不清楚此错误来自何处,因此TEST\u F必须与fixture位于同一命名空间中。@Irbis我想这是使用它的首选方式,但不是必需的,我已经更新了答案。
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)
{
…