2017-03-24 5 views
0

Ich versuche Unit Test UITableView zu testen, aber ich habe keine Ahnung, wie es geht. Ich habe einen View-Controller, der eine Tabellenansicht enthält. Jede Prototypzelle verfügt über eine benutzerdefinierte Tabellenansichtszellenklasse mit angeschlossenen Anschlüssen.Wie Unit Test UITableView?

Nun möchte ich diese beiden Komponenten separat testen. Erstens möchte ich testen, ob die Daten in der Tabellenansichtszelle korrekt sind, indem ich die Prototypzelle separat erstelle. Zweitens möchte ich meine Tabellenansicht mit zufälligen Daten füllen und testen, ob die Objekte korrekt sind usw. Wie kann ich beides tun?

Zum Testen der Zelle selbst habe ich keine Ahnung, wie Sie die Zelle separat erstellen und überprüfen, indem Sie Daten an sie senden. Meine benutzerdefinierte Klasse hat also kleine Funktionen, um Daten in Zellen zu setzen, anstatt Daten direkt Label, Button oder Bild zuzuweisen. Ich möchte diese Funktionen testen. Aber ich kann es nicht überprüfen, wenn ich es nicht rende.

Zum Testen der Komponenten ist mein Problem in dem Sinne anders, dass ich die Daten ändern möchte, die dazu kommen. Anstatt also die Daten aus der API zu lesen, möchte ich sie normal lesen, aber ich weiß nicht, wie ich viewDidLoad ändern kann, um mit lokalen Objekten statt mit Netzwerkobjekten zu arbeiten.

+1

Sie können UI-Tests verwenden. –

+0

ASAIK ist das einzige Werkzeug von Apple, um UI-Tests zu machen: https://www.youtube.com/watch?v=7zMGf-0OnoU&t=2589s Die Handhabung ist einfach. – kuzdu

Antwort

4

Die kurze Antwort ist: Sie nicht. Als Faustregel gilt, dass Sie beim Komponententest die Geschäftslogik und nicht die Benutzeroberfläche testen sollten. Ansichten sollten im Allgemeinen so wenig Funktionalität aufweisen, dass es keinen Grund gibt, Unit-Tests gegen sie auszuführen.

Bearbeiten: um dies ein bisschen mehr zu erklären. Ich bevorzuge es, Informationen nur in einer Ansicht zu speichern, die damit zusammenhängt, wie sie aussieht, wo sie positioniert ist usw. Dies kann normalerweise deklarativ programmiert werden. Darüber hinaus verfügt die Ansicht über die geringste Funktionalität, um Benutzerinteraktionen von Ihrem UI-Framework in eine Schnittstelle zu konvertieren für Ihren Moderator (bei Verwendung von MVP) oder Controller (bei Verwendung von MVC). Der Moderator oder Controller könnte dann nach Herzenslust über dieselbe Schnittstelle getestet werden.

Ich finde auch, dass Sie eine Menge Komplexität und Bugs vermeiden können, wenn Sie eine Vorliebe für das Erstellen neuer Ansichten entwickeln, anstatt bestehende Ansichten neu zu rendern. Dies ist nicht immer machbar. Aber wenn das der Fall ist, hat die Ansicht viel weniger dynamische Arbeit und zeigt stattdessen nur das Modell an, das in den Konstruktor übergeben wurde.

1

Ich bin auch auf das gleiche Problem .. und bis jetzt habe keine Lösung gefunden .. !!

aber ich habe diesen Link < unit tests with TableView >

Obwohl es in Objective-C ist ich den Code bedeuten .. aber sobald Sie den Code, den Sie gelesen haben, werden Sie sich in der Lage, die gleichen in Swift 3 .. sonst schreiben Sie versuchen können online Konverter ..

auch von den oben genannten Artikel bezieht ich bin in der Lage einige Testfälle zu schreiben, die fein arbeiten ..

Hoffe, es hilft.