#swift #dependency-injection #xcode-ui-testing
#swift #внедрение зависимости #xcode-ui-testing
Вопрос:
По очевидным причинам я не хочу загрязнять свой производственный код тестовым кодом. Я пытаюсь использовать платформу тестирования пользовательского интерфейса XCode. Во время выполнения я хочу заменить один из классов другим, который существует только в моей цели тестирования.
Есть идеи, как я могу этого добиться?
Комментарии:
1. Взгляните на SBTUITestTunnel , это может пригодиться.
2. Согласно их документации, SBTUITestTunnel должен содержать компоненты, «один из которых должен быть создан в приложении, а другой — в тестовом коде». Мне бы очень хотелось избежать использования какого-либо кода, связанного с тестированием, в рабочей среде.
Ответ №1:
Вам нужно то, что называется тестовым макетом.
Вы создаете макет класса в своем тестовом файле, который расширяет класс, который вы хотите создать.
class MockHttp extends HttpService {
var getWasCalledCount = 0
override func get(request: URLRequest) {
getWasCalledCount = getWasCalledCount 1
}
}
Затем в вашем тесте вы изменяете исходное свойство класса с помощью mock (мне нравится изменять его в методе setUp)
override func setUp() {
var mockHttp = MockHttp()
classIWantToInjectWithMock = ClassIWantToInjectWithMock(http: mockHttp)
}
Я надеюсь, что это поможет! Хорошего дня!