Testables 0.2.0

Testables 0.2.0

Suyeol Jeon维护。



Testables 0.2.0

  • Suyeol Jeon

Testables

CocoaPods CI

使私有属性可测试。

背景

假设有一个名为ProfileViewController的类。这个类有一个属性username,当新的值被赋值时,它会设置usernameLabel.text。不幸的是,我们不能编写单元测试,因为usernameLabel是一个私有属性。

ProfileViewController.swift

class ProfileViewController {
  var username: String? {
    didSet {
      self.usernameLabel.text = self.username
    }
  }
  private let usernameLabel = UILabel()
}

ProfileViewControllerTests.swift

// when
viewController.username = "devxoul"

// then
let usernameLabel = viewController.usernameLabel // 🚫 private
XCTAssertEqual(usernameLabel.text, "devxoul")

解决方案

Testables提供了一种使用Swift KeyPath暴露私有属性的方法。

将以下行添加到ProfileViewController.swift中

#if DEBUG
import Testables

extension ProfileViewController: Testable {
  final class TestableKeys: TestableKey<Self> {
    let usernameLabel = \Self.usernameLabel
  }
}
#endif

并更新测试代码

// when
viewController.username = "devxoul"

// then
let usernameLabel = viewController.testables[\.usernameLabel] //
XCTAssertEqual(usernameLabel.text, "devxoul")

许可证

Testables采用MIT许可证。有关更多信息,请参阅LICENSE文件。