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