谷歌模拟单例C++类
Google Mock a Singleton C++ Class
我很难弄清楚如何模拟单例类,并在另一个类中测试它。目标是验证来自单一实例类 (警报( 的方法是否从另一个类 (CEvnt( 调用。
我能够通过消除单例函数成功测试这一点,但由于它是遗留代码,我无法更改结构。
在网上浏览了几篇文章和帖子,我还没有找到明确的答案。有谁知道如何为单例课程设置 Google 测试?任何参考资料或文章都可以提供很大的帮助。
单例类:
class Alarm
{
public:
Alarm();
virtual ~Alarm();
// Singleton
static Alarm* find(void)
{
if (!Alarm_Instance)
{
Alarm_Instance = new Alarm();
}
return Alarm_Instance;
}
// Member methods
virtual ENUM_TYPE getType(ENUM_TYPE ENUM_ARG);
private:
static Alarm* Alarm_Instance;
};
ENUM_TYPE Alarm::getType(ENUM_TYPE ENUM_ARG)
{
return aMatch[ENUM_ARG].aType;
}
模拟:
class Alarm_Mock : public Alarm
{
public:
Alarm_Mock();
virtual ~Alarm_Mock();
MOCK_METHOD1(getType, ENUM_TYPE(ENUM_TYPE ENUMONE));
};
谷歌测试:
class Ev_test: public testing::Test
{
void SetUp()
{
mpsEV= new CEvents();
ON_CALL(msMock, getType(_)).WillByDefault(Return(SOME_ENUM));
}
void TearDown()
{
delete mpsEV;
}
protected:
Alarm_Mock msMock;
CEvents* mpsEV;
};
TEST_F(Ev_test, testGetFunctions)
{
EXPECT_CALL(msMock, getAlarmType(_))
.Times(1);
mpsEV->aMethod(arg1, arg2, arg3, arg4);
}
要测试的类方法 - 是否调用了来自类警报的 getType?
void CEvents::aMethod(arg1, arg2, arg3, arg4)
{
Alarm::find()->getType(arg1);
}
CEvents::aMethod(( 在 Alarm::find(( 返回的实例上调用 getType(arg1(,这将与您的模拟对象不同。
一个快速的解决方法是将 Alarm::Alarm_Instance 的分配从 Alarm::find(( 移到 Alarm::Alarm(( 中。
相关文章:
- 为什么在单例中,检查类==空?
- C++ 实现模板单例类时出现链接错误
- 在类中存储单例的指针
- C++中的单例实现在调用 getInstance 函数时不会产生相同的类实例
- 具有非默认构造函数的单例类
- 使用 std::call_once 实现类似单例的功能
- 为什么单例使用指针而不是引用?
- 提升单例池release_memory vs purge_memory
- 具有 QObject 继承的单例 - Qt
- 单例类析构函数无法清理 (SDL_Quit) MinGW
- C++单例,不会为此文档加载任何符号
- 使用 CRTP 实现单例
- C++单例模板类使我的程序崩溃
- 初学者C++线程安全单例设计
- 派生类是单例是否是一种好的做法
- _CrtIsValidHeapPointer(块)错误在应用单例-帕特恩后退出主窗口时引发
- 在这种单例实施中,是否可以对两个商店重新排序?
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- C++ 单例实现 迈耶与call_once
- 如何析构单例实例,或者为什么以下代码适用于析构函数?