Zu diesem Zeitpunkt wird die öffentliche API ist in Xcode und dem Simulator erscheint keine Methode aufrufbar hat aus setUp()
und tearDown()
XCText
Subklassen „Reset Inhalte und Einstellungen“ für den Simulator.
Es gibt andere mögliche Ansätze, die öffentliche APIs verwenden:
Anwendungscode . Fügen Sie einen myResetApplication()
Anwendungscode hinzu, um die Anwendung in einen bekannten Zustand zu versetzen. Die Statussteuerung des Geräts (Simulators) wird jedoch durch die Anwendungssandbox eingeschränkt. Dies ist außerhalb der Anwendung keine große Hilfe. Dieser Ansatz ist zum Löschen der von der Anwendung steuerbaren Persistenz in Ordnung.
Shell-Skript . Führen Sie die Tests über ein Shell-Skript aus. Verwenden Sie xcrun simctl erase all
oder xcrun simctl uninstall <device> <app identifier>
ähnliches zwischen jedem Testlauf, um den Simulator zurückzusetzen (oder die App zu deinstallieren) . Siehe StackOverflow: "Wie kann ich den iOS-Simulator über die Befehlszeile zurücksetzen?"
xcrun simctl --help
xcrun simctl uninstall --help
xcrun simctl uninstall <device> <app identifier>
xcrun simctl erase <device>
xcrun simctl erase all
simctl privacy <device> <action> <service> [<bundle identifier>]
- Xcode-Schemaskriptaktion . Hinzufügen
xcrun simctl erase all
(oder xcrun simctl erase <DEVICE_UUID>
) oder ähnlicher Befehle zu einem Xcode-Schema-Abschnitt wie dem Test- oder Build-Abschnitt. Wählen Sie das Menü Produkt> Schema> Schema bearbeiten…. Erweitern Sie den Abschnitt Schematest. Wählen Sie im Abschnitt Test die Option Voraktionen. Klicken Sie auf (+) und fügen Sie "New Run Script Action" hinzu. Der Befehl xcrun simctl erase all
kann direkt eingegeben werden, ohne dass ein externes Skript erforderlich ist.
Optionen zum Aufrufen 1. Anwendungscode zum Zurücksetzen der Anwendung:
A. Benutzeroberfläche der Anwendung . [UI-Test] Geben Sie eine Schaltfläche zum Zurücksetzen oder eine andere UI-Aktion an, mit der die Anwendung zurückgesetzt wird. Das Oberflächenelement kann über ausgeübt werden , XCUIApplication
in XCTest
Routinen setUp()
, tearDown()
oder testSomething()
.
B. Parameter starten . [UI-Test] Wie von Victor Ronin bemerkt, kann ein Argument aus dem Test übergeben werden setUp()
...
class AppResetUITests: XCTestCase {
override func setUp() {
let app = XCUIApplication()
app.launchArguments = ["MY_UI_TEST_MODE"]
app.launch()
... von der AppDelegate
...
class AppDelegate: UIResponder, UIApplicationDelegate {
func application( …didFinishLaunchingWithOptions… ) -> Bool {
let args = NSProcessInfo.processInfo().arguments
if args.contains("MY_UI_TEST_MODE") {
myResetApplication()
}
C. Xcode-Schema-Parameter . [UI-Test, Komponententest] Wählen Sie das Menü Produkt> Schema> Schema bearbeiten…. Erweitern Sie den Abschnitt Scheme Run. (+) Fügen Sie einige Parameter wie hinzu MY_UI_TEST_MODE
. Der Parameter wird in verfügbar sein NSProcessInfo.processInfo()
.
let args = NSProcessInfo.processInfo().arguments
if args.contains("MY_UI_TEST_MODE") {
myResetApplication()
}
Z. Direktanruf . [Unit Test] Unit Test Bundles werden in die laufende Anwendung eingefügt und können direkt eine myResetApplication()
Routine in der Anwendung aufrufen . Vorsichtsmaßnahme: Standard-Unit-Tests werden ausgeführt, nachdem der Hauptbildschirm geladen wurde. Siehe Testladereihenfolge . UI-Testpakete werden jedoch als Prozess außerhalb der zu testenden Anwendung ausgeführt. Was also im Unit Test funktioniert, führt zu einem Linkfehler in einem UI-Test.
class AppResetUnitTests: XCTestCase {
override func setUp() {
myResetApplication()
gitlab-ci.yml
Datei gelöst .