我正在测试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失败:未引发错误。
我不确定为什么会这样。有什么建议吗?
答案 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)
}
}
它通过了测试。