即時通訊非常好奇人們的意見在什麼方式與硬件接口的軟件側應用程序應單元測試。單元測試應用程序接口到硬件 - 模擬或不模擬
例如,軟件應用程序「連接」的主要類將構建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