线程 1 变得奇怪:EXC_BAD_ACCESS(代码=1,地址=0x9)swift 中的崩溃错误
getting strange Thread 1: EXC_BAD_ACCESS (code=1, address=0x9) crash error in swift
我正在为 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
的测试目标,修复了错误。
我正在为 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
的测试目标,修复了错误。