XCTest для когда iCloud включен и отключен

При использовании SQLite версии 3 с PDO SQLite, это может быть так:

$insert = "INSERT INTO `module` (`mid`,`description`) VALUES (
            NULL,
            :text
            );
        ";
$stmt = $conn->prepare($insert);
$stmt->execute(array(':text'=> $text));

echo $conn->lastInsertId()
0
задан Jon Reid 1 February 2019 в 03:42
поделиться

1 ответ

Можем ли мы программно войти в CloudKit для модульного тестирования? Это нецелесообразно, потому что даже если бы мы могли, тесты были бы медленными & amp; хрупкий. Вместо этого рассматривайте CloudKit как архитектурную границу. Модульные тесты могут идти прямо до этой границы. И мы можем притворяться, что вещи возвращаются с границы. Таким образом, мы можем проверить все пути.

Чтобы запрограммировать эту границу в свой код, используйте протокол. Этот протокол будет слайсом, содержащим только те методы CKContainer, которые вы хотите. (Это принцип разделения интерфейса в действии.) Поскольку CKContainer уже реализует этот метод, мы можем присоединить его как пустое расширение.

protocol CKContainerProtocol {
    func accountStatus(completionHandler: @escaping (CKAccountStatus, Error?) -> Void)
}

extension CKContainer: CKContainerProtocol {}

Затем добавьте свойство в модель представления:

var cloudKitContainer: CKContainerProtocol = CKContainer.default()

Значение по умолчанию означает, что ваш код будет продолжать использовать настоящий CKContainer, если не указано иное. Измените свой код так, чтобы он звонил cloudKitContainer вместо CKContainer.default().

Затем в тестовом коде вы можете предоставить другую реализацию CKContainerProtocol. Это позволит вам делать заглушки и насмешки. Вы можете подтвердить, что accountStatus() вызывается ровно один раз. И вы можете использовать его замыкание с разными значениями CKAccountStatus, чтобы подтвердить, как вызывается ваше завершение Completion.

(Подобные вещи будут подробно рассмотрены в книге о модульном тестировании iOS, которую я сейчас пишу .)

0
ответ дан Jon Reid 1 February 2019 в 03:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: