【问题标题】:Testing Dark Mode using snapshot testing使用快照测试测试暗模式
【发布时间】:2021-07-13 23:54:23
【问题描述】:

任何线索我们如何使用快照测试来测试暗模式实现?或任何其他适用于 iOS 暗模式的测试策略。

当 XCUITest 是与 XCTest(单元测试)一起的选项之一时。 UITest 在深色模式下的问题意味着对于每个应用程序流,它都需要运行两次。

Unittest 用例是否足以满足暗模式的测试需求?您能想到仅使用暗模式的单元测试无法涵盖的任何用例吗?

【问题讨论】:

    标签: xcuitest ios-darkmode xctestcase darkmode snapshot-testing


    【解决方案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 快很多,因为我们不必浏览应用程序即可到达每个视图控制器。

    有多快?这是我在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-25
      • 2021-12-27
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2018-08-01
      • 2020-01-19
      • 2021-10-05
      相关资源
      最近更新 更多