2016-10-13 5 views

Antwort

0

Nein, sie werden nicht sichtbar sein.

@testable bietet Zugriff nur für "interne" Funktionen; "Private" Deklarationen sind außerhalb ihrer Datei selbst bei Verwendung von @testable nicht sichtbar.

+0

Entschuldigung, ich habe das falsche Wort benutzt. Ich meine "private API" nicht "private Methode" – hoangpx

+0

Ja, Sie können, aber wenn Sie Ihre App mit privaten APIs veröffentlichen, wird es von Apple abgelehnt. –

+0

Ich verwende diese nur im UI-Test, nicht im Quellcode der App. Die Frage ist also, ob mein Code oder meine Ressource im UI-Test zusammen mit dem Quellcode der App an Apple übermittelt wird? – hoangpx

2

Für mich stellt dies das native UI-Testpaket von Apple vor einen großen Nachteil. Dies ist kein großes Problem für iOS, da es so viele 3rd-Party-Pakete gibt, mit denen Sie die Benutzeroberfläche über das Unit-Test-Paket testen und das UI-Paket alle zusammen vermeiden können. Dies ist weniger der Fall, wenn Sie an TVOS- oder macOS-Projekten arbeiten, die nicht die gleiche Unterstützung bieten. tvOS ist derzeit in vielerlei Hinsicht für UI-Tests durchbrochen.

Am Ende, um Ihre Anwendung wirklich mit UI-Tests zu testen, müssen Sie viel mehr arbeiten, um die Dinge nativ arbeiten zu lassen. In den meisten Antworten werden Sie aufgefordert, -launchEnvironment oder -launchArguments zu verwenden, um alle Daten zu übergeben, die Ihre App zum Ausführen des UI-Tests benötigt. Ich kann Ihnen sagen, dass dies funktioniert, aber es lässt Sie nicht wissen, wie viel zusätzliche Arbeit benötigt wird, um diese Arbeit effektiv zu machen. Jedes Mocking oder Stubben von Daten für einen UI-Test muss Produktionscode verwenden. Wie in, müssen Sie Ihre Logik für Startargumente und Umgebungsvariablen einschließen und Ihre App zur Laufzeit ändern. Nicht gerade ein großartiger Ansatz, wenn Sie mich fragen, aber es kann gemacht werden.

Am Ende habe ich ein wenig Produktionscode geopfert, um zu garantieren, dass ich UI-Tests ausführen und das größere Teil der App schützen kann. Ich hatte meine eigene Netzwerkbibliothek erstellt, um die benötigten Daten zu übertragen. So konnte ich einen "Test" -Pfad für Netzwerkanforderungen programmieren, mit dem ich Daten zurückgeben konnte, die ich für die API-Aufrufe benötigte. Im Wesentlichen ein benutzerdefinierter Dateiname für einen Benutzer und ein Hash für URL und Parameter, mit denen meine Netzwerkbibliothek die spezifische Nutzlast für diese API zurückgeben kann. Sobald es funktionierte, funktionierte es großartig. Ich fühle mich immer noch ein bisschen dreckig dabei, aber es funktioniert.

Keine Menge Versuch und Irrtum erlaubt mir, Daten in einem UI-Test zu verspotten oder zu stubben. Am Ende ging es darum, die Testdaten in die App zu programmieren und Startargumente zu verwenden. Finger gekreuzt WWDC 17 wird bessere Nachrichten haben.

+0

Ja, ich benutze Stubbing und Mocking, um beim Ausführen auf die App zuzugreifen. Es gibt jetzt so viele Bugs und Einschränkungen des UI-Tests. Aber das ist das beste Werkzeug für Automatisierungstests jetzt und sicher, es wird bald besser. – hoangpx

+0

Ich würde gerne sehen, wie Sie in der Lage sind, Methoden mit Apple UI Tests zu verspotten und stub. Alles, was ich gesehen und gelesen habe, deutet darauf hin, dass dies nicht möglich ist, ohne etwas von der Verspottung in die App selbst zu machen, was ich tun musste, damit es für meine Sachen funktioniert. –

Verwandte Themen