即时通讯非常好奇人们的意见在什么方式与硬件接口的软件侧应用程序应单元测试。单元测试应用程序接口到硬件 - 模拟或不模拟
例如,软件应用程序“连接”的主要类将构建USB设备的句柄。
我想测试“连接”类的基本功能,比如说“OpenConnection”,它会尝试连接到USB硬件设备。
到目前为止我已经构建了一个MOCK硬件设备,并且在我的连接类中包含了一个编译器标志,所以如果它内置在单元测试模式下,它将使用模拟对象,否则它会使用实际的硬件接口。
参见下面的例子
class TConnection
{
public:
static TConnection* GetConnection();
static void Shutdown();
bool DidInitialise();
bool Write(uint8_t* _pu8_buffer);
bool Read(uint8_t* _pu8_buffer);
protected:
TConnection();
virtual ~TConnection();
bool init();
private:
static TConnection* mp_padConnection;
static bool mb_DidInitialise;
#ifdef _UNIT_TEST_BUILD
static mock_device* mp_handle;
#else
static device* mp_handle;
#endif
};
然后在源文件中包括我像
#include "connection.h"
#ifdef _UNIT_TEST_BUILD
mock_device* TConnection::mp_handle = nullptr;
#else
device* TConnection::mp_handle = nullptr;
#endif // _UNIT_TEST_BUILD
TConnection::TConnection()
{
...
init();
...
}
bool TConnection::init()
{
mp_handle = hid_open(_VENDOR_ID, _PRODUCT_ID, nullptr);
if (mp_hidHandle == nullptr) {
return false;
}
if (hid_set_nonblocking(mp_hidHandle, _DISABLE_NB) == _ERROR_CODE) {
return false;
}
return true;
}
我真的不喜欢我的代码的唯一的事情就是我的实际连接类包含测试代码。我更喜欢他们分开。我也不同意拥有一个全新的模拟连接类,它仅仅是为了单元测试的目的而编写的,它让我觉得我只是在写一些按照预期工作的东西。
所以我问,什么是预先测试的这样一类
谢谢您的时间和建议更好的方法
您好Marko,我想您刚刚为我提供了我的理想设计,谢谢!我非常喜欢这种界面方法。在我的课堂上嵌入了测试/模拟代码时,它非常抽象。我现在要尝试这种设计,但我相信它正是我所需要的。 – Spirit