Тестовая запись (по адресу: url) в Swift - PullRequest
1 голос
/ 17 октября 2019

У меня есть функция, которая использует

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 ( Documentation ), так что мы будем делать?

Опции:

  1. Вставить макет для NSString
  2. Не проверять эту функцию
  3. Переписать функцию, чтобы она возвращала Bool, и проверить результат
  4. Введите функцию .write через сигнатуру функции и замените Или другой параметр?

1 Ответ

1 голос
/ 17 октября 2019

Я думаю, что лучшим подходом будет использование протокола:

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

При таком подходе вы проверяете свою функцию, а также проверяетенапример, если url передано write(to:atomically:encoding), то функция хороша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...