如何在Swift中故意创建格式错误的URL

时间:2016-05-20 11:57:54

标签: ios swift nsurl xctest

我在NSURL

上有以下Swift扩展名
public extension NSURL {

    func getQueryItemValueForKey(key: String) -> String? {
        guard let components = NSURLComponents(URL: self, resolvingAgainstBaseURL: false) else {
            return nil
        }

        guard let queryItems = components.queryItems else { return nil }
        return queryItems.filter {
            $0.name == key
            }.first?.value
    }

}

我正在为它编写单元测试,但我无法获得100%的代码覆盖率,因为我似乎无法让NSURLComponents(URL: self, resolvingAgainstBaseURL: false)返回nil。据我所知,这需要一个格式错误的网址,但我很难创建一个。

我试过了:

  • let url = NSURL(string: "")
  • let url = NSURL(string: "http://www.example")
  • let url = NSURL(string: "http://www.exam ple.com")
  • let url = NSURL(string: "http://www.example.com/?param1=äëīòú")

还有一些我失去了追踪的人。我知道这可能是显而易见的事情,但此刻我迷失了。那么,如何在Swift中创建格式错误的URL?

1 个答案:

答案 0 :(得分:9)

正如我的研究中发现的那样,您可以使用负端口号(可能有更多情况但不确定)生成NSURLC组件格式错误而不是NSURL格式的URL:

let example = "http://example.com:-80/"
let url = NSURL(string: example)
print("url:\(url)") //prints out url:Optional(http://example.com:-80/)
if let url = url {
    let comps = NSURLComponents(URL: url, resolvingAgainstBaseURL: false)
    print("comps:\(comps)") //prints out comps:nil
}