2010-05-28 60 views
6

我正在爲一個小型Javascript應用程序中的模塊編寫單元測試。爲了保持界面清潔,一些實現細節被匿名函數(通常爲隱私的JS模式)關閉。但是,在測試時,我需要訪問/模擬/驗證私密部分。Javascript中的白盒測試 - 如何處理隱私?

我之前編寫的大多數測試都是在Python中,沒有真正的私有變量(成員,標識符,無論你想調用它們)。一個簡單的建議隱私通過用戶的一個領先的下劃線,並在測試代碼時自由地忽略它。在靜態類型的面嚮對象語言中,我假設可以通過將私有成員轉換爲受保護的子類並對待測試的對象進行子類化來使測試可以訪問私有成員。在Javascript中,後者不適用,而前者似乎是不好的做法。

我總是可以回退到黑盒測試並簡單地檢查最終結果。這是最簡單和最乾淨的方法,但不幸的是,對於我的需求來說不夠詳細。

那麼,有沒有一個標準的方法來保持變量專用,同時仍然保留一些後門用於JavaScript測試?

+8

嗯,我不喜歡當人們嘲笑我的私人部分 – Martin 2010-05-29 00:01:13

回答

1

不,我不相信有。這基本上歸結爲你是否採取封閉的方式,放棄白盒測試或做白盒測試,併爲「私人」成員使用名字裝飾。其實不僅在Python中,而且在JavaScript中太多的項目使用不那麼神奇的下劃線來裝飾私有。所以從某種意義上說,這已經成爲廣泛接受的解決方案。

如果你不想那麼真的,真的需要白盒單元測試,那麼你總是可以將測試集成到你的對象中。如果您對生產代碼有一個單獨的構建步驟(最小化,需求/提供解決方案等),那麼您可以在此過程中刪除測試功能。

+0

好吧,看起來我必須做一些裝飾畢竟。謝謝。將測試併入主代碼並在構建期間移除是一個有趣的解決方案,但有點太混亂。 – 2010-05-29 05:46:55