我正在進行單元測試的第一步,並且遇到了封裝問題。我的類有一些私人成員變量,這些變量對客戶端來說應該是不可見的,但爲了讓我把對象置於我想測試它的狀態,我需要設置這些私有變量。單元測試 - 設置私有成員以獲得期望的對象狀態
說我有一個這樣的代碼:
Class Foo {
public:
int action() ;
private:
int state ;
} ;
int Foo::action()
{
if(this->state == 1)
return 1 ;
else
return 0 ;
}
所以現在我想測試Foo::action()
,但我需要可以設置Foo::state
要能在不同情況下,檢查功能。一種解決方案是測試代碼中的邪惡「define private public
」。但是有更優雅的東西嗎?我想強調的是Foo::state
是一個不應該被客戶端訪問的變量,所以我不想聲明任何公共setter。
編輯:
我現在認爲,在派生類中擴展我想測試的類測試代碼和包括制定者會工作,提供我改變私有變量,以保護。但這是一種「僅限一代人」的解決方案,仍然感覺像是一種黑客而不是一種正確的方法。
編輯2:
閱讀答案和意見後,我得到了(感謝利芬和AP尤其如此。)我認爲實際的類我想現在來測試(不是我提供的簡單的例子)簡單地做得太多了,我的問題的答案是將其一些邏輯轉移到另一個將由大個子使用的類。
可能的重複[如何測試具有私有方法,字段或內部類的類?](https://stackoverflow.com/questions/34571/how-do-i-test-a-class-that -has-private-methods-fields-or-inner-classes) – Raedwald