使用Swift和Obj-C进行单元测试

时间:2015-02-10 15:16:02

标签: ios swift unit-testing cocoapods

我正在开始一个新的Swift项目,并且我正在尝试为它创建单元测试。我将Google Analytics框架添加到项目中,并链接了SystemConfiguration,CoreData,libsqlite3,libz和libGoogleAnalyticsServices。

然后,我必须手动创建一个桥接标头,并添加我将立即使用的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,但我目前还没有在Google Analytics上使用它,因为我每次运行pod进程时都需要手动更改配置文件。如果它有帮助,我的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

我还没有能够编写任何测试,因为我无法通过链接器错误。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

正如我在上面的评论中所述,我认为我遇到了相同或类似的问题:我的代码在运行时运行良好,但是当我尝试运行测试时,我试图实例化一个对象时遇到了Segfault 11引用了可可豆荚中的任何东西。我已经解决了这个问题。

当我遇到错误时,我的Podfile看起来像这样:

  

pod'ReactiveCocoa'

     

目标'MyTests'做

     
    

use_frameworks!

         

pod'Quick'

         

pod'Nimble

  
     

use_frameworks!是罪魁祸首:因为use_frameworks!只应用于测试目标,我在构建正常目标时静态链接到ReactiveCocoa,并在测试目标中动态链接。我错过了一些只在动态链接时才需要的ReactiveCocoa导入,而不是编译器告诉我它已经发生了分段。

我的Podfile现在看起来像这样:

  

use_frameworks!

     

pod'ReactiveCocoa'

     

目标'MyTests'做

     
    

pod'Quick'

         

pod'Nimble

  
     

有一些链接问题需要解决,但是从那里开始很简单,因为当我编译主要目标时,我得到了明智的错误。希望这有助于某人:)