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)
{
…