Unit testing 如何(Google)模拟DBUS接口?
假设我有一个具有以下代码的类Unit testing 如何(Google)模拟DBUS接口?,unit-testing,googlemock,Unit Testing,Googlemock,假设我有一个具有以下代码的类 void MessageBuilder::Init(DBusMessage* pMsg) { if (NULL != m_pMsg) { ::dbus_message_unref(m_pMsg); } // m_pMsg is a private data member m_pMsg = pMsg; ::dbus_message_iter_init_append(m_pMsg, &m_objAr
void MessageBuilder::Init(DBusMessage* pMsg)
{
if (NULL != m_pMsg)
{
::dbus_message_unref(m_pMsg);
}
// m_pMsg is a private data member
m_pMsg = pMsg;
::dbus_message_iter_init_append(m_pMsg, &m_objArgs);
}
DBUS调用位于名称空间中,因此::(我相信)。有谁能建议如何模拟/剔除::dbus_*调用吗?使用GoogleMock,您可以模拟类的虚拟方法。但是::dbus_*函数不是任何类的成员(没错,它们在一个名称空间中:全局名称空间)。因此,您不能(直接)使用GoogleMock 嵌入式C测试驱动开发中的James W.Grenning为您的问题提出了一些解决方案:
#define
覆盖名称,例如#define dbus_message_unref(p)fake_dbus_message_unref(p)
使被测组件调用您自己的伪函数fake_dbus_message_unref()
。这种方法需要将被测组件添加到测试项目中另一个替代方法是使用C++方法包装类:在::dBuSy**函数周围,这样你就可以使用像GoGoMeLokes这样的嘲弄工具来伪造它们。编写这样的包装可能需要相当多的努力。你可以搜索一个DBUS C++包装库——如果你运气好,你可以找到一个可模仿的。但是::dbus_*函数不是任何类的成员(没错,它们在一个名称空间中:全局名称空间)。因此,您不能(直接)使用GoogleMock
嵌入式C测试驱动开发中的James W.Grenning为您的问题提出了一些解决方案:#define
覆盖名称,例如#define dbus_message_unref(p)fake_dbus_message_unref(p)
使被测组件调用您自己的伪函数fake_dbus_message_unref()
。这种方法需要将被测组件添加到测试项目中另一个替代方法是使用C++方法包装类:在::dBuSy**函数周围,这样你就可以使用像GoGoMeLokes这样的嘲弄工具来伪造它们。编写这样的包装可能需要相当多的努力。作为快捷方式,您可以搜索DBUS C++包装库——如果您幸运的话,您可以找到一个可模仿的。
我正在为DBUS *函数编写包装类,并将对此进行模拟。我正在为DBUS *库函数编写包装类,并将对此进行模拟。