XCTest: как мы можем внедрить класс во время выполнения

По понятным причинам я не хочу загрязнять свой производственный код тестовым кодом. Я пытаюсь использовать среду тестирования пользовательского интерфейса XCode. Во время выполнения я хочу заменить один из классов другим, который существует только в моей цели тестирования.

Есть идеи, как мне этого добиться?

1 ответ

Вам нужно то, что называется тестовый макет.

В тестовом файле вы создаете фиктивный класс, который расширяет класс, который вы хотите имитировать.

class MockHttp extends HttpService {
  var getWasCalledCount = 0

  override func get(request: URLRequest) { 
   getWasCalledCount = getWasCalledCount + 1
  }
}

Затем в вашем тесте вы изменяете исходное свойство класса с помощью макета (мне нравится это в методе setUp)

override func setUp() {
  var mockHttp = MockHttp()
  classIWantToInjectWithMock = ClassIWantToInjectWithMock(http: mockHttp)
}

Надеюсь, это поможет! Хорошего дня!

Другие вопросы по тегам