2015-02-10 67 views
6

我開始一個新的Swift項目,並試圖爲它創建單元測試。我將Google Analytics框架添加到項目中,並鏈接了SystemConfiguration,CoreData,libsqlite3,libz和libGoogleAnalyticsServices。使用Swift和Obj-C進行單元測試

然後我不得不手動創建一個橋接頭,並添加了我將立即使用的GA頭。該應用程序已啓動並運行併發布到GA。然後我嘗試添加一些單元測試。

一旦發生這種情況,如果我向橋接頭添加橋接頭,則在測試目標的橋接頭中會收到'GAI.h' file not found錯誤。我還收到編譯器的Segmentation Fault 11錯誤。如果沒有橋接頭,錯誤將保持不變。

我試過將我的測試目標與SystemConfiguration,CoreData,libsqlite3,libz和libGoogleAnalyticsServices鏈接起來。這並沒有擺脫錯誤。

目前我的橋接頭並不多。

#import "GAI.h" 
#import "GAILogger.h" 
#import "GAITrackedViewController.h" 
#import "GAIFields.h" 

我還使用的CocoaPods但我沒有,因爲在有這麼多我需要在配置手動更改時刻與谷歌Analytics(分析)使用裏面的文件每次我都會運行莢處理時間。如果它幫助這裏是我的POD文件:

source 'https://github.com/CocoaPods/Specs.git' 
platform :ios, '8.1' 

pod 'JVFloatLabeledTextField' 

# Swift Pods 
pod 'Alamofire' 
pod 'JSONHelper' 

target 'example' do 

end 

target 'exampleTests' do 

pod 'Quick', :git => "https://github.com/Quick/Quick" 
pod 'Nimble', :git => "https://github.com/Quick/Nimble" 

end 

我一直沒能寫任何測試,但因爲我沒能獲得通過鏈接錯誤。有任何想法嗎?

+2

我覺得'快速'和'靈活'應該是相反的順序,然後是'跳過蠟燭棒'。 – 2015-02-10 15:20:37

+0

@James_Andreww你有沒有想過這個?我遇到了完全相同的問題:我的代碼運行良好,並且只要我沒有實例化任何引用可可pod的東西,我的測試就可以正常運行:只要我引用可可pod,我就可以在編譯時獲得SegFault 11。 – 2015-05-15 21:07:06

+0

@MichelleEllis不幸的是我的修復是創建一個全新的項目並重新添加我的所有文件。一旦我這樣做了,我就可以再次用cocoapods代碼進行測試。 – 2015-05-17 17:33:24

回答

4

正如我在上面的評論中所述,我認爲我遇到過相同或類似的問題:我的代碼在我運行它時運行良好,但是當我嘗試運行測試時,我試圖實例化一個對象那引用了可可豆的任何東西。我解決了它在我的情況。

當我有錯誤,我Podfile是這樣的:

莢 'ReactiveCocoa'

目標 'MyTests' 做

use_frameworks!

莢 '快速'

莢「敏捷

use_frameworks!是罪魁禍首:因爲use_frameworks!僅適用於測試目標,我最終在爲正常目標構建靜態鏈接到ReactiveCocoa時,動態地在測試目標中鏈接。我錯過了一些只有在動態鏈接時才需要的ReactiveCocoa導入,而不是編譯器告訴我它已被隔離。

我Podfile現在看起來是這樣的:

use_frameworks!

莢 'ReactiveCocoa'

目標 'MyTests' 做

莢 '快速'

莢「敏捷

有一幾林國王的問題,但他們很容易從那裏,因爲當我編譯的主要目標,我有理智的錯誤。希望這可以幫助某人:)