Тестирование темного режима с помощью тестирования снимков
Есть какие-то подсказки, как мы можем использовать тестирование снимков для проверки реализации темного режима? Или любую другую стратегию тестирования темного режима на iOS.
Когда XCUITest является одним из вариантов вместе с XCTest (unit-test). Проблема с UITest в темном режиме означает, что для каждого потока приложения его нужно запускать дважды.
Будет ли достаточно кейсов Unittest, чтобы удовлетворить потребности в тестировании в темном режиме? Можете ли вы придумать какой-либо вариант использования, который не будет рассмотрен с использованием только модульного тестирования для темного режима?
1 ответ
Я использую FBSnapshotTestCase для получения светлых и темных снимков в цели модульного теста:
final class ViewControllerSnapshotTests: FBSnapshotTestCase {
private var sut: ViewController!
override func setUp() {
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
sut = storyboard.instantiateViewController(
identifier: String(describing: ViewController.self)
)
usesDrawViewHierarchyInRect = true
recordMode = false // set to true to record snapshots
}
override func tearDown() {
sut = nil
super.tearDown()
}
func test_light() {
sut.overrideUserInterfaceStyle = .light
FBSnapshotVerifyViewController(sut)
}
func test_dark() {
sut.overrideUserInterfaceStyle = .dark
FBSnapshotVerifyViewController(sut)
}
}
В результате были получены следующие снимки:
Уловки были:
- Набор
usesDrawViewHierarchyInRect = true
на примере тестового снимка - Набор
overrideUserInterfaceStyle
на контроллере представления
Применяются обычные преимущества тестов моментальных снимков перед UITests. Снимки выполняются медленнее, чем обычные модульные тесты, но намного быстрее, чем UITests, потому что нам не нужно перемещаться по приложению, чтобы добраться до каждого контроллера представления.
Как быстро? Вот мои сроки, на MacBook Pro 2015 года выпуска.
Test Suite 'ViewControllerSnapshotTests' started at 2021-04-20 21:35:26.856
Test Case '-[SOTests.ViewControllerSnapshotTests test_dark]' started.
Test Case '-[SOTests.ViewControllerSnapshotTests test_dark]' passed (0.101 seconds).
Test Case '-[SOTests.ViewControllerSnapshotTests test_light]' started.
Test Case '-[SOTests.ViewControllerSnapshotTests test_light]' passed (0.029 seconds).
Test Suite 'ViewControllerSnapshotTests' passed at 2021-04-20 21:35:26.987.
Executed 2 tests, with 0 failures (0 unexpected) in 0.130 (0.131) seconds