Swift, как протестировать функцию с зависимостями
Привет, я новичок в издевательстве и окурках, так как это концепции, о которых я слышал, но на самом деле не видел примера, объясняющего, как это работает. Я понимаю базовое модульное тестирование, но я не нашел места, где я мог бы получить объяснение с простым примером насмешек и заглушек.
В моем приложении у меня есть эти две функции, которые я хотел бы протестировать, но я не знаю, как это сделать, поскольку существует зависимость.
private func setOverviewValues(weeklyData: CDPRewards, formattedTotal: String, displayMode: PointsDescriptionMode) {
let monthYearString = createSubtitle(from: displayMode, with: weeklyData)
view.setOverAllPoints(topValue: formattedTotal, bottomValue: monthYearString)
}
а также
private func createSubtitle(from displayMode: PointsDescriptionMode, with weeklyData: CDPRewards) -> String {
switch displayMode {
case .weeklyPoints:
if let monthString = weeklyData.month,
let yearString = weeklyData.year {
return displayMode.rawValue + monthString + " " + yearString
}
return PointsDescriptionMode.weeklyPoints.rawValue
default:
return displayMode.rawValue
}
}
Я хотел бы помочь, чтобы показать мне, как я могу выполнить тестирование этих функций или просто простой пример, который демонстрирует насмешки и заглушки. Также было бы замечательно указать в правильном направлении с точки зрения книг или блогов, которые я могу использовать.
1 ответ
Это короткий ответ.
Я не юнит тест private
функции / методы, но только публичный API. На самом деле, здесь вам интересны не внутренние компоненты компонента, а просто его поведение из внешнего мира.
Это длинный ответ.
В вашем конкретном случае я бы просто провёл модульное тестирование второй функции. Зачем? Потому что первый содержит побочный эффект. Вы собираетесь что-то изменить в представлении. И представления трудно проверить с помощью модульных тестов. Для просмотра я бы использовал приемочные тесты (например, тестирование интерфейса пользователя).
Возвращаясь к тесту для второй функции, я бы использовал модульный тест на основе значений.
Таким образом, предоставляя конкретные данные, вы должны ожидать правильный результат. Также крайние случаи должны быть проверены.
Вот несколько полезных ссылок на эту тему:
- https://medium.com/flawless-app-stories/a-complete-list-of-articles-on-unit-testing-with-swift-from-2017-9be8f046ef25
- https://qualitycoding.org/
Вот книга, которую я рекомендую прочитать (это не Swift, а на основе Java):
- Растущее объектно-ориентированное программное обеспечение, ориентированное на тесты