Habituellement j'essaie de séparer la logique de requête en plusieurs parties:
1) Routeur 2) client API qui utilise un routeur 3) modèle de cartographie
Et toutes ces pièces que vous pouvez tester.
Comment vous pouvez tester client API:
fileprivate func testPerformanceOfGetNewsFromAPI() {
let expectationTimeout: Double = 30.0
self.measure {
let expectation = self.expectation(description: "Get gifters")
NewsAPIClient.getNews(closure: { response in
expectation.fulfill()
})
self.waitForExpectations(timeout: expectationTimeout) { error in
XCTAssertNil(error)
}
}
}
Ce test vérifie. APIClient peut-il recevoir une réponse dans les 30 secondes.
Comment vous pouvez tester la cartographie:
Pour la cartographie, j'utilise JASON: https://github.com/delba/JASON
Configurez votre fichier rapide:
import XCTest
import JASON
@testable import ProjectName
final class NewsTests: XCTestCase {
// MARK: - Properties
fileprivate var news: News!
// MARK: - Lyfecycles
override func setUp() {
super.setUp()
news = mockExample()
}
override func tearDown() {
news = nil
super.tearDown()
}
}
Ensuite, créez dans cette classe votre simulacre:
fileprivate func mockExample() -> ExampleModel? {
let data: Data
let json: JSON
do {
try data = Data(resource: "MyExampleFile.json") // Here enter your JSON example file. Target member ship for this file should be your test target
try json = JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as! JSON
} catch let error {
XCTFail(error.localizedDescription)
return nil
}
let model = ExampleModel(json: json)
return model
}
Ensuite, vous pouvez écrire essai dans cette classe:
fileprivate func testMapping() {
XCTAssertNotNil(news)
XCTAssertEqual(news.title, mockExample()?.title)
XCTAssertEqual(news.text, mockExample()?.text)
XCTAssertEqual(news.timeStamp, mockExample()?.timeStamp)
}
Dans la logique de test, vous pouvez également ajouter les téléchargements d'images (si elles sont présentes dans JSON). Ainsi, vous pouvez vérifier si le modèle actuel est correct pour vous, peut traiter la réponse JSON.
Merci pour la bonne réponse. Mais je pense que ce n'est pas exactement ce que j'ai demandé. J'ai également séparé le flux de demandes en parties logiques. Et j'ai besoin de tester si la complétion de la requête sera terminée si une partie est défectueuse (par exemple, un code HTTP incorrect, une réponse invalide qui ne peut pas être analysée par exemple). Si le flux ne s'arrête pas si quelque chose ne va pas, alors je peux avoir une erreur d'exécution. Merci. – Yura