Swift TyphoonBlockComponentFactory中的XCTest错误

5
我正在使用Swift、Typhoon和Cocoapods。一切都很顺利,直到我开始为我的Typhoon组件编写集成测试(根据Typhoon-Example-App Test)。我想在测试的setUp()方法中设置TyphoonFactory,就像我在AppDelegate中所做的那样。当我执行测试时,我总是会得到一个由Typhoon抛出的错误:

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

Typhoon使用kindOfClass方法来实现此功能。相同的代码在AppDelegate中运行完美,但我无法确定问题所在。

为了验证这种行为,我在两个类中实现了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
    }
}

你的类是MyAssembly还是ONETyphoonAssembly?能否提出GitHub问题并提交示例代码?我们仍在努力支持Swift。 - Jasper Blues
已完成:台风问题 - robbiebubble
感谢TyphoonGroup的帮助,我通过从PodFiles的"MyAppTests"部分中删除Typhoon依赖项来解决了问题。更多详情请参见Typhoon-Issue - robbiebubble
1个回答

7
为了其他用户的利益: 正如在 Typhoon的Github 上讨论的那样,当Typhoon CocoaPod被包含在应用程序目标和测试目标中时,就会出现此错误。
由于应用程序风格的测试(设置TEST_HOST标志)现在几乎已经成为默认值,因此测试目标自动继承主应用程序目标的依赖项。对于Swift而言,在名称空间中,如果它们在测试目标中重复,事情可能会出错。
因此,解决方案是从测试目标中删除Typhoon和应用程序的任何其他依赖项,因为这些都是继承的。您仍然可以按以下方式包含特定于测试的依赖项:
target :tests, :exclusive => true do
   pod 'OCMockito'
   pod 'AnotherTestLibrary' #etc . . 
end

1
OCMock的解决方案相同。 - Leszek Zarna
2
再次感谢你,Jasper!这就是正确的答案,立即解决了我的问题 :) - Vincil Bishop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接