【问题标题】:Swift TyphoonBlockComponentFactory Error in XCTestXCTest 中的 Swift TyphoonBlockComponentFactory 错误
【发布时间】:2014-10-12 11:46:23
【问题描述】:

我正在将 Swift 与 Typhoon 和 Cocoapods 一起使用。在我开始为我的 Typhoon 组件编写集成测试(根据Typhoon-Example-App Test)之前,一切都运行良好。我想在测试setUp() 方法中设置TyphoonFactory,就像我在AppDelegate 中所做的那样。当我执行测试时,我总是得到一个

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

Typhoon 引发的错误(它在后台使用 kindOfClass 方法。)相同的代码在 AppDelegate 中完美运行,我不知道出了什么问题。

为了验证这种行为,我在展位类中实现了isKindOfClass check in(参见下面的代码):

  • AppDelegate ->
  • MyComponentTest ->

有人可以进一步帮助我吗? 非常感谢!

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。
  • 完成:Typhoon Issue
  • 感谢 TyphoonGroup 我通过从 PodFiles“MyAppTests”部分删除 Typhoon 依赖项解决了这个问题。更多详情见Typhoon-Issue

标签: ios swift xctest typhoon xcode6-beta5


【解决方案1】:

为了其他用户的利益:

正如在Typhoon's Github 上所讨论的,当 Typhoon CocoaPod 包含在应用目标和测试目标中时会发生此错误。

由于应用程序风格的测试(设置了 TEST_HOST 标志)现在几乎无处不在,测试目标会自动从主应用程序目标继承依赖项。在 Swift 的情况下,使用名称间距,如果它们在测试目标中重复,事情可能会中断。

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

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

【讨论】:

  • OCMock 的相同解决方案。
  • Jasper 你再一次摇滚!这是正确的答案,并立即解决了我的问题:)
猜你喜欢
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 2018-06-15
  • 2017-03-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多