如何使用间谍对TextView进行单元测试

时间:2019-04-27 05:43:38

标签: swift unit-testing mocking stub spy

我有一个包含textView的单元格,并且我想测试使用单元测试正确设置了textView的属性。但是,由于它是私有的,因此在测试中访问textView时似乎遇到了障碍。

有没有一种方法可以测试我的textView :-

这是我的代码

class MyCell {

  private let myText: UITextView = {
      let textView = UITextView()
      textView.isScrollEnabled = false
      textView.isEditable = false

      return textView
    }()

  func setup(viewModel: MYViewModel) {

      if viewModel.someValue {
          myText.backgroundColor = UIColor.red
      } else {
          myText.backgroundColor = .clear
      }

    }
}

是否可以测试将testView的背景色设置为清除?

2 个答案:

答案 0 :(得分:1)

除非您希望将MATCH (thisB:B)-[:c1]->(a:A)<-[:c1]-(otherB:B) MERGE (thisB)-[:c2]-(otherBs) 的访问级别从myText放松到private(如果未指定,则默认为默认),就没有 direct 测试方式。

我唯一需要间接测试的建议是使用snapshot testing

您可以编写两个快照测试,对于internal中每个.someValue的值进行一次快照测试。

使视图的测试和可维护性变得简单的另一种方法是,按照humble view模式引入MYViewModel值类型。

基本上,您可以在ViewConfigurationstruct之间使用MYViewModel来描述MyCell的每个视图属性。

MyCell

struct MyCellViewConfiguration { let textFieldBackgroundColor: UIColor } extension MYViewModel { var viewConfiguration: MyCellViewConfiguration = { return MyCellViewConfiguration( textFieldBackgroundColor: someValue ? .red : .clear ) } } extension MyCell { func setup(with configuration: MyCellViewConfiguration) { myText.backgroundColor = configuration.textFieldBackgroundColor } } 中的代码非常简单(只需一对一分配),您无需进行测试就可以逃脱。

然后您可以编写测试以测试如何根据setup(with configuration: MyCellViewConfiguration)计算MyCellViewConfiguration

答案 1 :(得分:0)

只需从声明中删除private。然后,访问控制将是默认的internal。在测试代​​码中,请确保@testable import,以便访问内部功能。

单元测试一些属性并不难。但是,如果要进行记录外观的测试,请查看快照测试。无需XCUITestCase即可完成。它比常规单元测试慢一个数量级,但可能比UI测试快另一个数量级。