Swift 4-XCTAssertThrowsError失败:未引发错误

时间:2019-05-17 14:35:47

标签: swift unit-testing error-handling xctest sfspeechrecognizer

我正在测试SFSpeechRecognizer的错误处理。我无法使用XCTAssertThrowsError()来引发错误。

创建SFSpeechRecognizer将返回一个对象,如果没有语言环境,则返回nil

public convenience init?() // Returns speech recognizer with user's current locale, or nil if is not supported

public init?(locale: Locale) // returns nil if the locale is not supported

func createSpeechRecognization(locale : Locale) throws -> SFSpeechRecognizer {
    guard let speechRecognizer = SFSpeechRecognizer(locale: locale) else {
        throw SpeechToTextError.speechRecognizerIsNil
    }
    return speechRecognizer
}

这是我尝试抛出的单元测试函数:

func testCreateSpeechToTextAudioSessionNotNotAvailable() {
    XCTAssertThrowsError(try sut.createSpeechRecognization(locale: Locale.current)) {error in
        XCTAssertEqual(error as? SpeechToTextError, SpeechToTextError.speechRecognizerIsNil)
    }
}

由于错误,单元测试失败:

  

XCTAssertThrowsError失败:未引发错误。

我不确定为什么会这样。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

XCTAssertThrowsError不会断言该函数,它只是断言,这要感谢@mag_zbc。

我将单元测试修改为:

func testCreateSpeechToTextAudioSessionNotNotAvailable() {
    var locale : Locale = Locale(identifier: "pwned")

    XCTAssertThrowsError(try sut.createSpeechRecognization(locale: locale)) {error in
        XCTAssertEqual(error as? SpeechToTextError, SpeechToTextError.speechRecognizerIsNil)
    }
}

它通过了测试。