2012-08-06 71 views
1

我正在嘗試爲具有傳統C++庫依賴項的iOS應用程序編寫測試。舊式庫具有初始化例程和靜態變量,每個應用週期都必須運行/設置一次。iOS應用程序測試靜態庫初始化

我創建了一個工作正常的測試目標。我的測試目標設置爲通過Bundle Loader將我的應用程序用作測試主機。這將啓動iOS應用程序,然後使用[SenTestCase調用測試]來運行測試。鑑於此設置,我希望讓應用程序初始化庫並讓測試以「庫已初始化」狀態運行。這似乎符合Apple Application Test範例。但是,在運行測試時,在啓動應用程序期間初始化的遺留庫的靜態變量爲NULL。沒有用戶代碼會重置變量。

我期待我的應用程序測試能夠訪問我的應用程序的靜態變量。有什麼我可以配置允許這個?我錯過了什麼嗎?


爲了澄清,麻煩的靜態變量是在鏈接的C++庫。應用程序和單元測試似乎沒有共享相同的應用程序範圍。

+0

除了這個可以訪問你的應用的單元之外,你還有其他單元測試嗎? – 2012-08-19 02:50:26

+0

我可以在我所有其他測試中使用該應用。只有C++庫中的靜態變量會導致問題。 – HatAndBeard 2012-08-20 14:49:10

+1

我也遇到過這個問題。我相信問題是有2個版本的靜態變量正在創建; 1在您的測試二進制文件中,1在您的應用程序二進制文件爲了澄清,我相信這是所有靜態變量的問題,而不僅僅是C++。 – Tylerc230 2012-11-09 19:05:04

回答

4

我有一個類似的問題,但有一個Obj-C靜態庫。單身人士創建了兩次(一次在應用程序中,一次在測試包中)。他們的指針也在靜態存儲器中。

問題是我將庫鏈接到測試包目標。

我通過從「Link Binary With Libraries」列表中刪除庫來修復它。 然後我還需要更改靜態庫的構建設置:我必須將「默認隱藏符號」設置爲NO。

+1

哦,你救了我的屁股!我連接了一個靜態庫(.a)兩次,因此有單一的靜態變量,其中有兩次,即使是dispatch_once ... – malaba 2013-06-28 16:27:46