2015-11-23 9 views

Antwort

23

Das UI-Testframework hat keinen Zugriff auf Ihren Anwendungscode, wodurch Klassenzusicherungen für Instanzen unmöglich gemacht werden. Sie können nicht direkt sagen die Klasse des Controllers, der auf dem Bildschirm ist.

Wenn Sie jedoch etwas anders über Ihren Test nachdenken, können Sie eine sehr ähnliche Aussage machen. Schreiben Sie Ihre Tests, als ob Sie der Benutzer sind. Ihrem Benutzer ist es egal, ob er/sie einen ItemDetailViewController oder einen ItemListTableViewController schaut, also sollten Ihre Tests auch nicht.

Der Benutzer kümmert sich, was auf dem Bildschirm angezeigt wird. Wie lautet der Titel? Oder, wie heißen diese Knöpfe? Wenn Sie dieser Logik folgen, schreiben Sie Ihren Test neu, um basierend auf diesen Elementen zu bestätigen, nicht den Namen der codierten Klasse.

Wenn Sie beispielsweise Ihren Controller in einem Navigationsstapel präsentieren, können Sie den Titel bestätigen.

Oder, wenn der Bildschirm modal präsentiert wird, aber Sie einige statische Text oder Schaltflächen kennen, verwenden Sie diese.

let app = XCUIApplication() 
app.buttons["View Item"].tap() 

XCTAssert(app.staticTexts["Item Detail"].exists) 
XCTAssert(app.buttons["Remove Item"].exists) 
+0

Danke, das hilft sehr. Ich habe es genau gemacht, dachte aber, dass mir etwas fehlt. –

+1

In meinem Fall muss ich 'sleep (1)' vor 'app.buttons [" View Item "]. Tap()' damit es funktioniert – onmyway133

+4

Ich fühle, dass es einen besseren Weg geben muss, dies zu tun ... Was passiert, wenn Sie den Text in der App ändern? Was passiert, wenn Sie mehrere Lokalisierungen des Textes in der App haben? Es scheint, dass es ziemlich viele Tests erfordern würde, wenn es lokalisiert ist und ein potenzieller Maintenance-Kopfschmerz, wenn der Text sich ändern muss. –