Swift TyphoonBlockComponentFactory Ошибка в XCTest
Я использую Свифт с Тайфуном и Кокоаподами. Все работало хорошо, пока я не начал писать Integrationtest (в соответствии с тестом Typhoon-Example-App) для моего компонента Typhoon. Я хотел настроить TyphoonFactory
в тесте setUp()
Метод так же, как я сделал в AppDelegate
, Когда я выполняю тест, я всегда получаю
TyphoonBlockComponentFactory assertIsAssembly:] + 244: ОШИБКА: MyApp.MyAssembly не является подклассом TyphoonAssembly
ошибка, вызванная тайфуном (который использует kindOfClass
метод под капотом.) Тот же код отлично работает в AppDelegate
и я не могу понять, что не так.
Чтобы проверить это поведение, я реализовал isKindOfClass
Проверьте в классах стенда (см. код ниже):
- AppDelegate -> правда
- 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
}
}
1 ответ
В интересах других пользователей:
Как уже говорилось в Github на Typhoon, эта ошибка возникает, когда Typhoon CocoaPod включен как в цель приложения, так и в цель теста.
Поскольку тесты в стиле приложения (с установленным флагом TEST_HOST) теперь используются по умолчанию почти везде, цель теста автоматически наследует зависимости от основной цели приложения. В случае Swift, с интервалом имен, вещи могут сломаться, если они дублируются в цели теста.
Поэтому решение состоит в том, чтобы удалить Typhoon и любые другие зависимости приложения от цели тестирования, поскольку они наследуются. Вы все еще можете включить специфичные для теста зависимости следующим образом:
target :tests, :exclusive => true do
pod 'OCMockito'
pod 'AnotherTestLibrary' #etc . .
end