Как выполнить модульное тестирование textView с помощью шпиона - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть ячейка, которая содержит 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 ]

1 голос
/ 29 апреля 2019

Если вы не хотите уменьшить уровень доступа myText с private до internal (по умолчанию, если вы его не указали), прямой способ проверить его не существует.

Единственное предложение, которое я должен проверить косвенно, это использовать тестирование снимков .

Вы можете написать два теста снимков, по одному для каждого значения .someValue изваш MYViewModel.

Еще один способ сделать тестирование - и ремонтопригодность - вашего взгляда простым - ввести тип значения ViewConfiguration, следуя шаблону скромное представление .

В принципе, вы можете иметь struct между 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) такойпросто - просто задание 1-к-1, которое вы можете получить без тестирования.

Затем вы можете написать тест для вычисления MyCellViewConfiguration из MYViewModel.

0 голосов
/ 29 апреля 2019

Просто удалите private из вашей декларации.Тогда контроль доступа будет по умолчанию internal.В тестовом коде обязательно @testable import, чтобы получить доступ к внутренним функциям.

Юнит-тестирование нескольких атрибутов не сложно.Но если вам нужен тест, который записывает внешний вид, посмотрите на тестирование снимков.Это можно сделать без XCUITestCase.Это на порядок медленнее, чем обычный модульный тест, но, вероятно, еще на порядок быстрее, чем тест пользовательского интерфейса.

...