我有一个方法(初始化程序)需要测试:
public convenience init(jsonString: String, identifier: String, editable: Bool) throws {
if let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding) {
try self.init(jsonData: data, identifier: identifier, editable: editable)
} else {
throw ToggleSetJSONStringError.JSONStringEncodingError
}
}
我必须编写一个单元测试来检查它是否正确抛出任意 JSONStringEncodingError
。我很难想出这种情况何时会发生。我知道 dataUsingEncoding:
将在字符串无法转换为目标编码时返回 nil
但我不知道实际上是如何导致的。我试过了,f.ex.:
func testThatItThrowsJSONStringEncodingErrorWhenInitializedWithJSONNotConvertibleToUTF8String() {
let jsonNonConvertibleString = "🐱🇩🇪"
do {
let _ = try ToggleSet.init(jsonString: jsonNonConvertibleString, identifier: "not relevant here", editable: true)
XCTFail("ToggleSetError.JSONStringError error should be thrown.")
} catch let e as ToggleSetJSONStringError {
XCTAssertEqual(e, ToggleSetJSONStringError.JSONStringEncodingError)
}
catch {
XCTFail("Wrong error thrown, should be: ToggleSetError.JSONStringEncodingError")
}
}
但是仍然没有抛出上述错误。对于不可转换为 UTF8 编码的字符串有什么创意吗?
最佳答案
任何 NSString
都可以编码为 UTF-8,因此无法使用该编码获得 nil
。
从 NSString dataUsingEncoding
方法获取 nil
的唯一方法是使用不支持给定字符串的编码,例如 ASCII 编码,字符串包含表情符号字符。
关于ios - 如何导致NSString的dataUsingEncoding : method return nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984807/