iOS - Как различить пользовательский интерфейс и юнит-тесты и как использовать их в этой конкретной ситуации? - PullRequest
0 голосов
/ 05 октября 2018

Я совершенно новичок в области пользовательского интерфейса и модульных тестов и очень озадачен тем, как их использовать, а также как их дифференцировать.Поэтому я подумал о следующем случае использования:

У меня есть пользователь, у которого есть набор MyData, простой объект, подобный этому:

class MyData: NSObject {
    var settled: Bool?
    var id: String?
}

class User {
    var datas: Set<MyData>?
}

Вот поведениеприложение: пользователь сначала получает MyDataListViewController, находящееся в состоянии loading, метод viewDidLoad запускает асинхронную функцию, допустим, мы используем Parse для этого:

static func loadDatas(success: ((Set<Data>) -> Void)?, error: ((String) -> Void)?) {
    // Here we fetch the datas and return then in the success or an error
    // ... 
}

Обратный вызоврезультат заполняет UITableView контроллера, и при нажатии на ячейку он открывает модальное всплывающее окно для конкретного MyData с кнопкой, чтобы изменить его значение settled.

myData.settled = !myData.settled
myData.save()

Учитывая эту информацию,

  • Как бы разделить пользовательский интерфейс и модульные тесты?
  • Как и что я должен настроить для каждого из этих тестов?

Спасибо, что прочитали меня и помогли мне, и еще раз извините, если это звучит очень новичком.Я все еще очень озадачен предметом.Кроме того, извините, если лучшее место, чем SO, подходит для такого рода вопросов, я действительно не знал, где спросить.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Для тестирования пользовательского интерфейса пользователь может напрямую пройти симулятор с другой версией устройства и ОС.чтобы они могли получить определенный интерфейс для каждого устройства и версии.Как и сейчас, интерфейс так же важен, как и функциональность.

Для модульного тестирования необходимо задействовать код, а для этого нужно проверить ответ API, набор кода, любой прямой сбой, поток приложения путем правильного ответа соответствующих API.Как правило, разработчики заботятся о модульном тестировании, чтобы приложение было готово к тестированию.

0 голосов
/ 05 октября 2018

Ответы на ваши конкретные вопросы были бы слишком длинными, чтобы вставить SO-ответ.Тем не менее, один из ваших корневых вопросов, похоже, в чем разница между модульным тестом и тестированием пользовательского интерфейса.Что на можно ответить .

Действительно короткая версия заключается в том, что модульные тесты имеют доступ к коду в вашем приложении (или к любому типу создаваемого вами модуля), а тесты пользовательского интерфейса делают * 1005.* не имеют доступ к коду.

В модульном тесте тестируется только один отдельный класс на тест.Любые объекты, с которыми класс должен взаимодействовать, должны быть заменены поддельными объектами, которые контролирует тест.Если вы не вставляете фальшивые объекты, у вас нет возможности узнать, произошел ли сбой теста из того, что вы действительно пытались проверить, или из того, что он использует.(Следует отметить, что существует также такая вещь, как интеграционные тесты, которые тестируют функции, не выдавая ничего, кроме, возможно, сетевых ответов).

В идеале для модульных тестов вы хотите иметь класс тестовых случаев для каждого класса вваше приложение.Затем в каждом тестовом примере можно сосредоточиться на одном классе и тестировать его как можно более подробно.

Тесты пользовательского интерфейса используют функции доступности различных платформ Apple, чтобы эффективно притворяться пользователем, использующим приложение.Идея состоит в том, что вы используете XCode для записи последовательности действий для выполнения задачи в вашем приложении (возможно, для добавления элемента todo), а затем редактируете код, который XCode генерирует для вас для тестирования конкретных вещей, например, есть ли в табличном представлении один такойэлемент todo и содержит ли эта ячейка правильный заголовок.

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

Чтобы получить более подробное представление о модульном тестировании и тестировании пользовательского интерфейса с помощью Xcode, есть несколько постов и книг в блоге:

https://www.raywenderlich.com/709-ios-unit-testing-and-ui-testing-tutorial https://medium.com/flawless-app-stories/a-complete-list-of-articles-on-unit-testing-with-swift-from-2017-9be8f046ef25

Книги

Я уверен, что есть и другие ресурсы, но они должны помочь вам начать.Статья Рэя Вендерлиха должна дать вам хороший обзор и позволит сформулировать более целенаправленные вопросы для Google и SO.

...