使用快照测试测试暗模式
Testing Dark Mode using snapshot testing
任何线索我们如何使用快照测试来测试暗模式实施?或 iOS.
上暗模式的任何其他测试策略
当 XCUITest 是与 XCTest(单元测试)一起的选项之一时。暗模式下 UITest 的问题意味着每个应用程序流程都需要 运行 两次。
Unittest 用例是否足以满足暗模式的测试需求?您能想到仅使用暗模式单元测试无法涵盖的任何用例吗?
我使用 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
适用于 UITest 的快照测试的通常优势。快照比普通单元测试慢,但 比 UITests 快 很多,因为我们不必在应用程序中导航以到达每个视图控制器。
有多快?这是我的时间,运行 在 2015 MacBook Pro 上。
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
任何线索我们如何使用快照测试来测试暗模式实施?或 iOS.
上暗模式的任何其他测试策略当 XCUITest 是与 XCTest(单元测试)一起的选项之一时。暗模式下 UITest 的问题意味着每个应用程序流程都需要 运行 两次。
Unittest 用例是否足以满足暗模式的测试需求?您能想到仅使用暗模式单元测试无法涵盖的任何用例吗?
我使用 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
适用于 UITest 的快照测试的通常优势。快照比普通单元测试慢,但 比 UITests 快 很多,因为我们不必在应用程序中导航以到达每个视图控制器。
有多快?这是我的时间,运行 在 2015 MacBook Pro 上。
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