如何在 C++ 中的 Normal 或 Singleton Class 中使用 GoogleTest 私有 method/enum class
How to GoogleTest a private method/enum class inside a Normal or Singleton Class in c++
我需要对单例的私有方法进行 Gtest class。我尝试使用单例的 Friend class 。但没有帮助。
它说无法调用 Private。我添加了 class,Gtest 试过了,输出错误。随时询问更多的澄清,在此先感谢!
如有错别字请忽略..
待测试的单例Class以下:
class Listener: public CommonListen {
public:
friend class test_listener;
Listener(task_id taskid, const string thread_name) :
CommonListen(taskid, thread_name ) { }
static Listener* GetInstance() {
if (Listener_ptr_ == nullptr) {
Listener_ptr_ = new
Listener(LISTENER_ID, ListenerName);
}
return Listener_ptr_;
}
private:
// Override the base's method
void SetupPub();
static Listener* Listener_ptr_;
};
我厌倦了使用 Friend class 的 GTest,如下所示:
class test_listener : public ::testing::Test {
public:
void call_private(void);
};
TEST_F(test_listener, create_listener) {
call_private();
}
void test_listener::call_private() {
(Listener::GetInstance())->SetupPub();
}
抛出如下错误:
error: 'virtual void Listener::SetupPub()' is private
void SetupPub();
^
test_listener.cc:48:63: error: within this context
(Listener::GetInstance())->SetupPub();
^
make[2]: *** [test_listener.o] Error 1
请分享您的观点
@@@@无效案例:@@@@
class xxx : public yyy {
friend class test_xxx;
enum class State : std::int8_t { SSS = 1,
DDD, FFF};
enum class AlignmentFlags : std::int8_t { ZZZ= 1,
CCC= 2, VVV= 4, BBB= 8,
NNN= 3, MMM= 12};
public:
// **********
}
在 erroroccurs 下方使用的“#define private public”之后调用上述私有枚举 class 时:
../src/qqq/xxx.h:189:14: error: 'enum class
xxx::AlignmentFlags' is private
enum class AlignmentFlags : std::int8_t { ZZZ = 1,
访问喜欢:
xxx->SetAlignmentFlags(12);
您可以在 GTest cpp 文件的第一行添加以下内容,然后再添加其他内容:
#define private public
这将使您的测试可以访问 class 的所有私有成员,因为它们将被编译为 public。
我需要对单例的私有方法进行 Gtest class。我尝试使用单例的 Friend class 。但没有帮助。 它说无法调用 Private。我添加了 class,Gtest 试过了,输出错误。随时询问更多的澄清,在此先感谢! 如有错别字请忽略..
待测试的单例Class以下:
class Listener: public CommonListen {
public:
friend class test_listener;
Listener(task_id taskid, const string thread_name) :
CommonListen(taskid, thread_name ) { }
static Listener* GetInstance() {
if (Listener_ptr_ == nullptr) {
Listener_ptr_ = new
Listener(LISTENER_ID, ListenerName);
}
return Listener_ptr_;
}
private:
// Override the base's method
void SetupPub();
static Listener* Listener_ptr_;
};
我厌倦了使用 Friend class 的 GTest,如下所示:
class test_listener : public ::testing::Test {
public:
void call_private(void);
};
TEST_F(test_listener, create_listener) {
call_private();
}
void test_listener::call_private() {
(Listener::GetInstance())->SetupPub();
}
抛出如下错误:
error: 'virtual void Listener::SetupPub()' is private
void SetupPub();
^
test_listener.cc:48:63: error: within this context
(Listener::GetInstance())->SetupPub();
^
make[2]: *** [test_listener.o] Error 1
请分享您的观点
@@@@无效案例:@@@@
class xxx : public yyy {
friend class test_xxx;
enum class State : std::int8_t { SSS = 1,
DDD, FFF};
enum class AlignmentFlags : std::int8_t { ZZZ= 1,
CCC= 2, VVV= 4, BBB= 8,
NNN= 3, MMM= 12};
public:
// **********
}
在 erroroccurs 下方使用的“#define private public”之后调用上述私有枚举 class 时:
../src/qqq/xxx.h:189:14: error: 'enum class
xxx::AlignmentFlags' is private
enum class AlignmentFlags : std::int8_t { ZZZ = 1,
访问喜欢:
xxx->SetAlignmentFlags(12);
您可以在 GTest cpp 文件的第一行添加以下内容,然后再添加其他内容:
#define private public
这将使您的测试可以访问 class 的所有私有成员,因为它们将被编译为 public。