#ios #swift #unit-testing
#iOS #swift #модульное тестирование
Вопрос:
Мое приложение поддерживает динамические шрифты. Когда пользователь изменяет размер шрифта в настройках ( Settings > General > Accessibility > Larger Text
) и возвращается к приложению, тогда каждая метка должна быть обновлена.
Это реализовано путем переопределения функции UILabel
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
guard previousTraitCollection?.preferredContentSizeCategory != traitCollection.preferredContentSizeCategory else { return }
let metrics: UIFontMetrics = UIFontMetrics(
forTextStyle: UIFont.TextStyle.body
)
font = metrics.scaledFont(for: font)
}
Теперь мне нужно проверить, правильно ли другие представления реагируют на динамический характер метки.
В частности, я хотел бы провести следующий модульный тест:
- Создать представление с меткой
- Получить размер представления
- Измените системный шрифт на более крупный
- Получить размер представления
- Сравните, изменились ли размеры
func testDynamicFont() {
let v: MyView = MyView()
let oldSize: CGSize = v.intrinsicContentSize
??? What to do here? ???
let newSize: CGSize = v.intrinsicContentSize
XCTAssertNotEqual(
oldSize,
newSize,
"Size of view should adjust to new environment"
)
}
Комментарии:
1. Решает ли приведенный ниже ответ вашу проблему?
2. Да, это так. Спасибо 🙂
Ответ №1:
Вы можете увеличить размер системного шрифта, используя приведенный ниже код.
let settings = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
settings.launch()
settings.tables.staticTexts["General"].tap()
settings.tables.staticTexts["Accessibility"].tap()
settings.tables.staticTexts["Larger Text"].tap()
settings.sliders.element.adjust(toNormalizedSliderPosition: 0.7) // Increase as you need
Чтобы вернуться к своему собственному приложению,
let yourapp = XCUIApplication(bundleIdentifier: "com.xxx.yourappbundleid")
yourapp.activate()
Протестировано на iPhone (реальном устройстве), iOS 12.1.4