2017-11-15 4 views
0

Wir möchten das Empfangen von Push-Benachrichtigungen (während die App aktiv ist) in einem UITest testen. Die goto-Lösung mit echten Push-Benachrichtigungen zu senden klingt ein bisschen wie ein Overkill (und funktioniert nur auf einem realen Gerät): http://www.pixeldock.com/blog/testing-push-notifications-with-xcode-uitests/Push-Benachrichtigung simulieren in UITest

Meine Frage zu sehen ist: Ist es möglich, (direkt oder indirekt) zu nennen UIAppicaltionDelegate des didReceiveRemoteNotification von einem (UI) XCTestCase?

+0

nicht, aber Sie können einige Software verwenden Push-Benachrichtigung mit outer Implementierung auf dem Server –

+0

können Sie weitere Informationen zu Ihrem Vorschlag zu schicken? – cornr

+0

Es wird Ihnen helfen, Test-Push-Benachrichtigung ohne Server zu senden. https://github.com/noodlewerk/NWPusher –

Antwort

0

Sie können keine Funktionen im Code Ihrer App von einem UITest aufrufen. UITests werden in einem separaten Prozess ausgeführt und haben keinen Zugriff auf die Funktionen und Methoden Ihrer App.

Von Apple Docs:

UI Tests unterscheidet sich von Unit-Tests in grundlegender Weise. Unit Testing ermöglicht es Ihnen, innerhalb der App-Bereich arbeiten und können Sie Funktionen und Methoden mit vollem Zugriff auf die Variablen Ihrer App und Zustand ausüben. Der UI-Test übt die Benutzeroberfläche Ihrer App genauso aus wie die Benutzer ohne Zugriff auf die internen Methoden, Funktionen und Variablen Ihrer App. Dadurch können Ihre Tests die App auf die gleiche Weise sehen wie ein Benutzer , wodurch Benutzeroberflächenprobleme angezeigt werden, auf die Benutzer stoßen.

Direkt didReceiveRemoteNotification von einem Test Aufruf ist möglich, in einem Unittest. Ich weiß nicht, wie Ihre App Push-Benachrichtigungen verarbeitet, aber wenn Sie das gewünschte Ergebnis mit einem Komponententest testen können, der eine gültige Alternative sein könnte.

0

Sie können Ereignisse in Ihrer App innerhalb einer UITest auslösen. Ich habe es vorher getan, indem ich Buttons auf meine Ansichten gesetzt habe (eine Einschränkung ist, dass ich die Schaltfläche (n) zu jeder Ansicht hinzufügen musste, auf der die Ereignisse stattfinden sollten).

Um sicherzustellen, dass Sie nur die Schaltflächen beim UITesting hinzufügen, übergeben Sie in Ihrer setUp() Funktion launchArguments, indem Sie Elemente an das Array launchArguments anfügen.

launchArguments.append("push_notification_button")

Um den Zugriff aus der App:

if ProcessInfo.processInfo.arguments.contains("push_notification_button") { 
    // Add button 
} 
+0

Dies würde funktionieren, aber ich nicht bequem mit Testcode in meinem Produktionscode. – cornr