Ich verwende eine private API, um vom UI-Test auf den Quellcode zuzugreifen. Wird mein Code oder meine Ressource im UI-Test zusammen mit dem Quellcode an Apple zur Überprüfung gesendet?Kann ich im UI-Test eine private API verwenden?
Antwort
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.
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.
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
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. –
- 1. iOS Wie private API verwenden?
- 2. Kann ich private Instanzmethoden als Callbacks verwenden?
- 3. Wie kann ich eine private Nachricht im IRC richtig zuordnen?
- 4. Xamarin UITest kann nicht eingebenText
- 5. Private Zuschauer, die die YouTube-API verwenden
- 6. Wie kann ich eine private/geschützte API mithilfe der Web-API von ASP.NET erstellen?
- 7. Ist CAFilter immer noch eine private API?
- 8. iphone private API
- 9. Kann ich eine Vektorzeichendatei im ActionBar Menu Icon verwenden?
- 10. Private Klasse im Namespace
- 11. Wie kann ich eine Fortschrittsleiste im Meter-Stil verwenden?
- 12. iOS Private API Dokumentation
- 13. Wie kann ich den Komponisten für eine private Abhängigkeit optimieren?
- 14. Kann UITest DLL Assembly nicht laden
- 15. UITest lokalisierte Anwendung
- 16. iOS Touch Ereignisbenachrichtigungen (private API)
- 17. Make api explorer private
- 18. iphone private API
- 19. Ich kann nicht Salz-API verwenden
- 20. XCode 7 UITest Exportprotokolle
- 21. UITest fehlgeschlagen mit: "SetUp: System.InvalidOperationException"
- 22. IOSurface - IOS Private API - Screenshot im Hintergrund erfassen
- 23. Skyscanner Reise API/verwenden private apikey/Return 429
- 24. Wie kann ich eine einfachere Link-Syntax im Organisationsmodus verwenden?
- 25. Wie kann ich eine Variable im Andockfenster erstellen und verwenden?
- 26. Kann ich Telefon API in PHP verwenden?
- 27. Private Video über REST api
- 28. Softlayer API: Private vlan bestellen
- 29. VIMEO API Private Videos suchen
- 30. Wie kann ich eine private Aufgabenliste in JIRA erstellen?
Entschuldigung, ich habe das falsche Wort benutzt. Ich meine "private API" nicht "private Methode" – hoangpx
Ja, Sie können, aber wenn Sie Ihre App mit privaten APIs veröffentlichen, wird es von Apple abgelehnt. –
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