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. На самом деле, здесь вам интересны не внутренние компоненты компонента, а просто его поведение из внешнего мира.

Это длинный ответ.

В вашем конкретном случае я бы просто провёл модульное тестирование второй функции. Зачем? Потому что первый содержит побочный эффект. Вы собираетесь что-то изменить в представлении. И представления трудно проверить с помощью модульных тестов. Для просмотра я бы использовал приемочные тесты (например, тестирование интерфейса пользователя).

Возвращаясь к тесту для второй функции, я бы использовал модульный тест на основе значений.

Таким образом, предоставляя конкретные данные, вы должны ожидать правильный результат. Также крайние случаи должны быть проверены.

Вот несколько полезных ссылок на эту тему:

Вот книга, которую я рекомендую прочитать (это не Swift, а на основе Java):

  • Растущее объектно-ориентированное программное обеспечение, ориентированное на тесты
Другие вопросы по тегам