对iOS单元测试期望感到困惑

时间:2019-10-03 18:51:51

标签: ios swift

我有以下代码,该代码根据计步器是否正在运行来设置trackingState的状态。

func startPedometer() {

    if self.pedometer.pedometerAvailable && !self.pedometer.permissionDeclined {
        self.pedometer.start { error in
            if error != nil {
                self.trackingStatus = .notAuthorized
            } else {
                self.trackingStatus = .started
            }
        }
    }
}

我有以下单元测试,该单元测试失败,并显示错误消息,异步等待失败。

func test_should_change_status_to_not_authorized() {

    let mockPedometer = MockPedometer()
    mockPedometer.pedometerAvailable = true
    mockPedometer.permissionDeclined = false

    mockPedometer.error = MockPedometer.notAuthorizedError

    let stepTracker = StepTracker(pedometer: mockPedometer)

    let exp = expectation(for: NSPredicate(block: { (thing, _) -> Bool in
        return (thing as! StepTracker).trackingStatus == .notAuthorized
    }), evaluatedWith: stepTracker, handler: nil)

    stepTracker.startPedometer()

    wait(for: [exp], timeout: 1.0)
}

如果我转到原始代码并进行更改

if error != nil {

if let error = error {

然后测试通过。这是为什么?

更新

很奇怪,我将超时时间更新为2秒,现在两个测试都通过了。

0 个答案:

没有答案