2017-02-01 1 views
2

Ich bin neu in Unit-Test in Swift. Jetzt wollte ich meinen ViewController testen. In ViewDidLoad habe ich einen asynchronen Aufruf. Wenn ich meinen Controller testen möchte, wenn die Daten korrekt geladen wurden, wurden die Daten nicht geladen. Ich habe bereits gelesen, dass ich eine XCTestExpectation einbauen muss.Swift Unit Test- Warten auf viewDidLoad

So die Informationen, die ich habe, habe ich von dieser Frage: XCTest Unit Test data response not set in test after viewDidLoad

Die Antwort gibt es ein Beispiel, von dem ich weiß nicht, wie zu implementieren. Mein Test-Klasse sieht wie folgt aus:

import XCTest 
@testable import apirequest 

class SearchedForViewControllerTests: XCTestCase { 
    var vc: SearchedForViewController! 

    override func setUp() { 
     super.setUp() 

     let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
     vc = storyboard.instantiateViewController(withIdentifier: "SearchedForViewController") as! SearchedForViewController 

     vc.passedString = "garten" 
     let _ = vc.view 
    } 

    func testArticlesShwon() { 
     print(vc.tableView.numberOfRows(inSection: 0)) 
    }  
} 

Also, wenn ich auf meinem eigenen Code aussehen Teil viewDidLoad geschieht in

let _ = vc.view 

Wenn ich in einer Erwartung aufbauen will, muss ich dafür warten Teil. Aber der Teil ist keine Funktion. Also weiß ich nicht, wie ich nach dem Laden meine Erwartungen erfüllen könnte.

Antwort

0

Dies könnte eher eine Meinung/Design-Antwort sein, aber ich würde empfehlen, Ihre ViewController und Ihr Modell vollständig separat zu testen.

z. Wenn Sie Ihren VC testen, legen Sie die Daten in Ihren Tests manuell fest und führen Sie anschließend Tests durch, um sicherzustellen, dass Ihr Modell und alle Netzwerk-/Async-Aufrufe ordnungsgemäß funktionieren.