Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中测试写入(到:url)_Swift - Fatal编程技术网

在Swift中测试写入(到:url)

在Swift中测试写入(到:url),swift,Swift,我有一个函数 func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: String.Encoding) throws 以便: func writeString(string: String, withDestinationFileName dest: String, withSubDirectory: String = ""){ _ = createDirectory(toDirector

我有一个函数

func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: String.Encoding) throws
以便:

func writeString(string: String, withDestinationFileName dest: String, withSubDirectory: String = ""){
        _ = createDirectory(toDirectory: directory, withSubDirectoryPath: withSubDirectory)
        if let fullDestPath = buildFullURL(forFileName: dest, withSubDirectoryPath: bundleName, inDirectory: directory)
        do {
            try string.write(to: fullDestPath!, atomically: true, encoding: .utf8)
        } catch let error {
            print ("error\(error)")
        }
} }

通常,为了测试文件函数,我使用mock和stubing,例如,我刚刚为Filemanager.default编写了一个mock

然而,这里我们在NNString()上有一个实例方法,那么我们该怎么办呢

选项:

  • 为NSString注入一个mock
  • 不测试此函数
  • 重写函数,使其返回Bool,并检查结果
  • 通过函数签名和替换注入.write函数 还是另一种选择

  • 我认为,最好的方法是使用协议:

    protocol WriteableString {
        func write(to url: URL, atomically: Bool, encoding: String.Encoding) throws
    }
    
    extension String: WriteableString {}
    
    class MockWriteableString {
        var url: URL?
    
        func write(to url: URL, atomically: Bool, encoding: String.Encoding) throws {
            self.url = url
            //...
        }
    }
    
    并将您的功能更改为:
    func writeString(string:WriteableString,withDestinationFileName dest:string,withSubDirectory:string=“”)

    使用这种方法,您可以测试函数,还可以检查传递给
    write(to:atomicaly:encoding)的
    url
    函数是否良好