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)
}
Надеюсь, это поможет! Хорошего дня!