Я пытаюсь провести модульное тестирование своего API с Alamofire в качестве остальной структуры. Я добавил зависимости модулей и все, что есть в файле Podfile, и нет ошибок в отношении отсутствующих модулей или чего-то еще. В настоящее время в качестве примера я пытаюсь перейти на домашнюю страницу Google и при ответе пытаюсь оценить код ответа с помощью XCRAssertEqual. Функция работает нормально, если я использую контроллер представления, но он не работает в тестовом классе. Под неработающим я имел в виду, что он дает истинный для обоих случаев, поскольку оба кода ответа равны .успех и .filure. В чем может быть причина этого? Ниже мой TestClass, в котором определена функция, и класс тестового примера, в котором она используется.
import Foundation
import Alamofire
class TestingClass {
private init(){
}
static let sharedInstance = TestingClass()
func getSquare(number:Int)->Int{
return number * number
}
func getGoogleResponse(completion:@escaping (_ rest:Int)->Void){
Alamofire.request("https://google.com").responseString { response in
var result = -1
switch response.result {
case .success:
result = 0
case .failure(let error):
result = 1
}
completion(result)
}
}
}
класс тестового случая
import XCTest
@testable import MyApp
class MyAppTests: XCTestCase {
func testSquare(){
XCTAssertEqual(TestingClass.sharedInstance.getSquare(number:2),6)
}
func testGoogle(){
TestingClass.sharedInstance.getGoogleResponse { (res) in
print("ANURAN \(res)")
XCTAssertEqual(res, 0)
}
}
}
Первый тестовый пример работает нормально, поскольку он не имеет ничего общего с Alamofire, но второй раз никогда не дает сбоев.
да, просто прочтите это. Придется использовать ожидания. Спасибо за комментарий





Хотя я знаю, что запросы Alamofire являются асинхронными, мне не приходило в голову, что он может провалить и мой тестовый пример. Итак, что вам нужно сделать, это дождаться ответа. Для этого вам нужно использовать ожидание, который поставляется с XCTestCase. Итак, переписанный код будет таким:
import XCTest
@testable import MyApp
class MyAppTests: XCTestCase {
func testSquare(){
XCTAssertEqual(TestingClass.sharedInstance.getSquare(number:2),6)
}
func testGoogle(){
let expectation = self.expectation(description: "Hitting Google")
var result:Int?
TestingClass.sharedInstance.getGoogleResponse { (res) in
print("ANURAN \(res)")
result=res
expectation.fulfill()
}
wait(for: [expectation], timeout: 30)
XCTAssertEqual(result!, 1)
}
}
Это потому, что Alamofire.request асинхронный