XCTest中的Swift TyphoonBlockComponentFactory错误

rob*_*ble 5 ios xctest typhoon swift xcode6-beta5

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

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

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

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

  • 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
Run Code Online (Sandbox Code Playgroud)

MyAssembly.swift

public class MyAssembly : TyphoonAssembly{
    //Some definitions
}
Run Code Online (Sandbox Code Playgroud)

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))")
    …
}
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*ues 7

为了其他用户的利益:

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

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

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

target :tests, :exclusive => true do
   pod 'OCMockito'
   pod 'AnotherTestLibrary' #etc . . 
end
Run Code Online (Sandbox Code Playgroud)

  • 贾斯珀再一次摇滚!这是正确的答案,立即解决了我的问题:) (2认同)