XCTestCase waitForExpectationsWithTimeout:handler:在未满足期望时抛出EXC_BAD_ACCESS

e19*_*985 7 xcode ios xctest swift xctestexpectation

我正在使用XCTestExpectation测试异步调用.

在给定的1秒超时之前执行completionHandler时,以下代码有效(测试成功).

func test__async_call() {
        // prepare
        let sut = ClassToTest()
        let expectation: XCTestExpectation = self.expectationWithDescription(nil)

        // test
        sut.methodToTestWithCompletionHandler() { () -> () in
            expectation.fulfill()
        }

        // verify
        self.waitForExpectationsWithTimeout(1, handler: nil)
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果没有调用completionHandler,因此没有满足期望,而是在调用waitForExpectationsWithTimeout时没有得到测试失败,我得到一个EXC_BAD_ACCESS,这不是很方便,因为这使得无法看到整个测试套件的结果.

如何避免这种情况并获得正常的测试失败?

e19*_*985 4

似乎导致 EXC_BAD_ACCESS 的原因是在创建期望时传递了零描述。

将任何字符串传递给此调用都会使其工作,并且当未满足期望时,我们会得到预期的测试失败。

let expectation: XCTestExpectation = self.expectationWithDescription("...")
Run Code Online (Sandbox Code Playgroud)

  • 设置描述并不能解决我的问题。我对我的所有期望进行了描述,但它们仍然偶尔会因未实现的期望而崩溃。 (3认同)
  • 当我假设处理程序块参数“error”永远不是“nil”时,出现了类似的错误。无论成功还是失败,处理程序实际上都会被调用。因此,在这种情况下,您必须检查是否有错误。 (2认同)