在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()上有一个实例方法,那么我们该怎么办呢
选项:
我认为,最好的方法是使用协议:
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
函数是否良好