如何在 c++ 中的 Normal 或 Singleton 类中 GoogleTest 私有方法/枚举类

How to GoogleTest a private method/enum class inside a Normal or Singleton Class in c++

本文关键字:GoogleTest 有方法 枚举 类中 Singleton c++ 中的 Normal      更新时间:2023-10-16

我需要测试单例类的私有方法。我尝试使用单例的好友类。但没有帮助。它说私人不能被召唤。我添加了类,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

这将使您的测试可以访问类中的所有私有成员,因为它们将被编译为公共成员。