如何在 c++ 中的 Normal 或 Singleton 类中 GoogleTest 私有方法/枚举类
How to GoogleTest a private method/enum class inside a Normal or Singleton Class in c++
我需要测试单例类的私有方法。我尝试使用单例的好友类。但没有帮助。它说私人不能被召唤。我添加了类,Gtest 尝试了,输出错误。请随时提出更多澄清,提前感谢!!如果有错别字,请忽略。
以下单例类待测试:
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_;
};
我厌倦了使用朋友类的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
请分享您的观点
@@@@Not 工作案例:@@@@
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:
// **********
}
在"#define 私有公共"之后调用上述私有枚举类时,发生以下错误:
../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
这将使您的测试可以访问类中的所有私有成员,因为它们将被编译为公共成员。
相关文章:
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 我的类中有方法的指针数组,但我不能调用我的方法.代码如下
- 如何处理一个子类有方法,而另一个没有方法的子类?
- 有方法的类,我不明白类的外观
- 是否有方法为模板参数指定所需的定义
- 如何在 c++ 中的 Normal 或 Singleton 类中 GoogleTest 私有方法/枚举类
- 是否有方法将相对库路径添加到可执行文件以避免设置LD_library_path
- 是否有方法将所有赋值运算符(+=、*=等)转发为隐式使用重写的直接赋值运算符(=)
- 是否有方法使用vector的内容作为键和自定义值来初始化unordered_map ?
- 在调用main函数之前,是否有方法解析命令行选项?
- 在c++中是否有方法对成员变量(类)进行后期初始化?
- 是否有方法为任何指针类型定义转换操作符
- 是否有方法为窗口窗体中的特定按钮挂钩鼠标事件
- 没有调用googletest设置方法
- 是否有方法检测内联函数ODR违规
- 在Windows Vista+上不注册proppage.dll,是否有方法访问远程过滤器图?
- 模板:只执行类中有方法的方法
- 是否有方法使Visual Studio对include区分大小写
- 是否有方法在调用函数时防止隐式的static_cast ?