我有一个需要测试的方法(初始化程序):
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编码?
答案 0 :(得分:6)
任何NSString
都可以编码为UTF-8,因此无法通过该编码获得nil
。
从nil
方法获取NSString dataUsingEncoding
的唯一方法是使用不支持给定字符串的编码,例如带有包含表情符号字符的字符串的ASCII编码。