Свифт, как заглушить функцию с помощью кукушки
Я пытаюсь написать тест для простого класса, однако кукушка не распознает одну из моих заглушек с закрытием. Есть ли способ заглушки функции с замыканием.
Функция-заглушка не вызывается, когда я делаю po на интеракторе или делегате, я вижу, что тесты ссылаются на реальный интерактор или делегат, а не на mocks.
Мой код:
typealias SuccessBlock = (_ responseModel: [Weather]?) -> Void
protocol WeatherInfo {
func fetchCityWeather ( success: @escaping SuccessBlock,
failure: @escaping (_ error: NSError?) -> Void)
}
protocol WeatherUpdates: WeatherInfo {
func fetchCityWeather ( success: @escaping SuccessBlock,
failure: @escaping (_ error: NSError?) -> Void)
}
ViewMoodel:
class WeatherViewModel {
private var interactor: WeatherInteractor
private weak var delegate: BaseViewModelDelegate?
init(interactor: WeatherInteractor, delegate: BaseViewModelDelegate) {
self.interactor = interactor
self.delegate = delegate
}
func getUpdates() {
interactor.fetchCityWeather( success: { [weak self] weather in
// do something
}) { (error) in
// show error
}
}
}
Тестовое задание:
class WeatherViewModelTests: XCTestCase {
var classUnderTest: WeatherViewModel!
let mockInteractor = MockWeatherInteractor()
let mockDelegate = MockBaseViewModelDelegate()
override func setUp() {
classUnderTest = WeatherViewModel(interactor: mockInteractor,
delegate: mockDelegate)
}
func testThatClosureReturnsCorrectValue() {
var mockUpdates: [Weather]? = nil
var testBool = false
stub(mockInteractor) {
when($0.fetchCityWeather( success: anyClosure(), failure: anyClosure())).then({ success, _ in
testBool = true
success(mockUpdates)
})
}
classUnderTest.getUpdates()
XCTAssertTrue(testBool)
}
}