我有一個用C++編寫的程序,爲了確保在進行更改時不會破壞任何內容,我想添加單元測試。由宏創建的單元測試方法
在程序中,我們使用宏來創建經常使用的某些對象。這看起來像:
#define PROPERTY_SWITCHPOINT(var) \
private: \
comp::SwitchPoint* m##var; \
public: \
void set##var(bool val, unsigned short switchIdx = 0) \
{\
if(m##var) m##var->setValue(val,switchIdx); \
}\
bool get##var() \
{\
return (NULL == m##var ? false : m##var->getValue()); \
}\
comp::SwitchPoint* get##var##Ptr() \
{\
return m##var; \
}
在包含我們調用宏
class Classname
{
private:
PROPERTY_SWITCHPOINT(SwitchpointObject)
}
在類中包含的開關點構造的開關點,我們接着做類的頭:
Classname::Classname()
{
mSwitchpointObject = CreateSwitchpoint("Switchpoint name", 2);
}
comp::SwitchPoint* Classname::CreateSwitchpoint(const std::string& name, unsigned short numberOfSwitches = 1)
{
comp::SwitchPoint* sp = new comp::SwitchPoint(name, true, numberOfSwitches);
return sp;
}
現在我們可以使用mSwitchpointObject->getValue()
來獲取此對象的值。所有這些工作,但我無法設法爲它創建單元測試,我正在使用unittest ++框架。 我用這個測試試了一下:
#include "UnitTest++.h"
#include "Classname.h"
namespace
{
TEST(SwitchpointTest1)
{
PROPERTY_SWITCHPOINT(SwitchpointObject)
mSwitchpointTestVariabele = CreateSwitchpoint("test switchpoint", 2);
CHECK_EQUAL(mSwitchpointTestVariabele->getValue(), true);
//mSwitchpointTestVariabele->setValue(false, 0);
//CHECK_EQUAL(mSwitchpointTestVariabele->getValue(), false);
//mSwitchpointTestVariabele->setValue(false, 1);
//CHECK_EQUAL(mSwitchpointTestVariabele->getValue(), false);
//mSwitchpointTestVariabele->setValue(true, 0);
//CHECK_EQUAL(mSwitchpointTestVariabele->getValue(), false);
//mSwitchpointTestVariabele->setValue(true, 1);
//CHECK_EQUAL(mSwitchpointTestVariabele->getValue(), true);
}
}
但是,這給了我編譯器錯誤:
| |In member function 'virtual void<unnamed>::TestSwitchpointTest1::RunImpl() const':|
| 9|error: expected primary-expression before 'private'|
| 9|error: expected ';' before 'private'|
| 9|error: expected primary-expression before 'public'|
| 9|error: expected ';' before 'public'|
| 9|error: a function-definition is not allowed here before '{' token|
| 9|error: a function-definition is not allowed here before '{' token|
|10|error: 'mSwitchpointTestVariabele' was not declared in this scope|
|10|error: 'CreateSwitchpoint' was not declared in this scope|
| |=== Build finished: 8 errors, 0 warnings ===|
我猜問題是,宏創建需要的代碼的一部分進行測試和在創建這個部分之前執行單元測試,但是從Aleguna的回覆中我明白這不是問題。
我應該如何編寫這樣的代碼測試?
您是否收到錯誤? –
所以你想告訴我們,在使用unittest ++時,你沒有告訴我們如何使用它,你犯了什麼錯誤? – PlasmaHH
即使在編譯器啓動之前,宏也會被擴展,更不用說單元測試運行時 – 2012-12-13 16:04:10