XCTest中的Swift TyphoonBlockComponentFactory错误

我正在使用Swift与Typhoon和Cocoapods。 一切顺利,直到我开始为我的Typhoon组件编写Integrationtest(根据Typhoon-Example-App Test )。 我想以与在AppDelegate相同的方式在Test setUp()方法中设置TyphoonFactory 。 当我执行测试时,我总是得到一个

TyphoonBlockComponentFactory assertIsAssembly:] + 244:错误:MyApp.MyAssembly不是TyphoonAssembly的子类

Typhoon引发的错误(在引擎盖下使用kindOfClass方法。)相同的代码在AppDelegate完美运行,我无法弄清楚什么是错误的。

为了validation这种行为,我在booth类中实现了isKindOfClass检查(参见下面的代码):

  • AppDelegate – > true
  • MyComponentTest – > false

有人可以帮助我吗? 多谢!

PodFile

 inhibit_all_warnings! target "MyApp" do pod 'Typhoon', '2.1.0' end target "MyAppTests" do pod 'Typhoon', '2.1.0' end 

MyAssembly.swift

 public class MyAssembly : TyphoonAssembly{ //Some definitions } 

AppDelegate.swift

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { … var assembly : MyAssembly = MyAssembly() //Always returns „true“ println("Is type of class: \(assembly.isKindOfClass(TyphoonAssembly))") … } 

MyComponentTest.swift

 import XCTest import MyApp class MyComponentTest: XCTestCase { override func setUp() { super.setup() var assembly : MyAssembly = MyAssembly() //Always returns „false“! println("Is type of class: \(assembly.isKindOfClass(TyphoonAssembly))") //Error is thrown „MyApp.MyAssembly is not a sub-class of TyphoonAssembly“ var factory : TyphoonComponentFactory = TyphoonBlockComponentFactory(assembly: assembly) as TyphoonComponentFactory } } 

为了其他用户的利益:

正如Typhoon的Github所讨论的那样,当Typhoon CocoaPod同时包含在app目标和测试目标中时,就会出现此错误。

由于应用程序样式测试(设置了TEST_HOST标志)现在几乎无处不在,因此测试目标会自动从主应用程序目标inheritance依赖关系。 对于Swift,使用名称间距,如果它们在测试目标中重复,则事情可能会中断。

因此,解决方案是从测试目标中删除Typhoon以及应用程序的任何其他依赖项,因为这些是inheritance的。 您仍然可以包含特定于测试的依赖项,如下所示:

 target :tests, :exclusive => true do pod 'OCMockito' pod 'AnotherTestLibrary' #etc . . end