在 Swift 中测试 write(to: url)



我有一个使用

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)")
}

} }

通常为了测试文件功能,我使用模拟和存根,例如我刚刚为Filemanager.default编写了一个模拟。

但是,这里我们在 NNString(文档(上有一个实例方法,那么我们该怎么办?

选项:

  1. 为 NSString 注入模拟
  2. 不测试此函数
  3. 重写函数,使其返回布尔值,并检查结果
  4. 通过函数签名注入 .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:atomically:encoding)函数url是否良好。

相关内容

  • 没有找到相关文章

最新更新