2016-05-02 4 views
2

私は、テストに必要な方法(初期化子)があります。NSStringのdataUsingEncodingを引き起こす方法:メソッドは、nilを返しますか?

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エンコーディングに変換できない文字列の創造的なアイデアですか?

答えて

4

任意のNSStringはUTF-8にエンコードすることができるため、そのエンコードでnilを取得する方法はありません。

NSString dataUsingEncodingメソッドからnilを取得する唯一の方法は、Emoji文字を含む文字列でASCIIエンコーディングなどの指定された文字列をサポートできないエンコーディングを使用することです。

関連する問題