我正在编写MyClass
的单元测试。考虑下面的代码:
MyClass.swift
class MyClass {
let collectionPeriod: TimeInterval
var previousCollectDate: Date?
init(period: TimeInterval, previousCollectDate: Date?) {
self.collectionPeriod = period
self.previousCollectDate = previousCollectDate
}
func schedule() { }
func collect() { }
}
MyClassTests.swift
import XCTest
@testable import MyModule
class CollectableTests: XCTestCase {
var sut: MyClass!
override func setUp() { }
override func tearDown() {
self.sut = nil
}
func testSchedule_NotScheduledBefore_CollectExecutesAfterCollectionPeriod() {
// let _ = Collectable(period: 11, previousCollectDate: nil)
self.sut = MockCollectable(suiteName: self.testSuiteName)
self.sut?.schedule()
}
}
class MockCollectable: Collectable {
init(suiteName: String) {
super.init(period: 5.0, previousCollectDate: Date())
}
}
奇怪的事情在这里发生,当我在这种情况下执行测试时,出现崩溃错误self.sut = MockCollectable(suiteName: self.testSuiteName)
但是当我添加(取消注释)行时let _ = Collectable(period: 11, previousCollectDate: nil)
实际上,除了创建一个在代码中未使用的实例外,崩溃什么都没有。有什么主意吗?
也许调试导航器信息可能会有用:
#0 0x00000001d0dd2aec in swift_checkMetadataState ()
#6 0x0000000104858398 in type metadata accessor for CollectableTests.MockCollectable ()
#7 0x00000001048582c8 in CollectableTests.testSchedule_NotScheduledBefore_CollectExecutesAfterCollectionPeriod()
#51 0x00000001c7a49d0c in UIApplicationMain ()
#52 0x00000001025882b0 in main
我不知道为什么会这样,也不知道为什么下面的解决方案可以解决这个问题。如果有人有更多信息,我将很高兴知道。
解决方案在Xcode中检查Allow testing Host Application APIs
作为测试目标,已修复错误。