2015-08-30 5 views
8

Warum, wenn ich meine Controller in Xcode testet, ist alles in Ordnung, aber deinit Methoden werden nicht aufgerufen. Ist es richtig?UITests: deinit heißt nicht

Während App normalerweise arbeitet, ist es in Ordnung, aber nicht für UITest Ziel.

Bei komplizierten Strukturen Simulator zuweisen immer und immer mehr Objekte, und ... Sie es nicht überhaupt freigeben. So wird die App manchmal auf langsameren Rechnern manchmal ohne Grund beendet ... und Tests können nicht ausgeführt werden.

Xcode 8, IOS 10, macOS Sierra.

+0

ist die Instanz in dem Testcode oder in dem Host-App-Code erstellt? –

+0

Ich denke, im Host-App-Code. UITests laufen unter Verwendung der Host-App (nicht sicher). –

+0

Wie haben Sie festgestellt, dass 'Deinit'-Methoden nicht aufgerufen wurden? Wenn möglich, posten Sie bitte den Testcode. Es könnte viel helfen. –

Antwort

0

Ich kann Ihre Frage nicht endgültig beantworten, ohne eine Probe des Testcodes zu sehen, aber Ihr Fall macht mich von ein paar Dinge verdächtig.

Grundsätzlich passiert, dass die App neue Prozesse für jeden ausgeführten Test erstellt. Ein Speicherleck irgendwo innerhalb des Codes wäre das erste zu untersuchende Problem. Wenn Sie Speicher verlieren, kann das Test-Framework einige Prozesse auslösen, die den Absturz verursachen und es ermöglichen, dass dieses Problem während des normalen Betriebs unter Radar gerät.

Auch wenn Sie De-Initialisierung werden die Controller explizit durch die Riss down-Funktion in der Testklasse, wird der Prozess im Allgemeinen nur am Ende des Tests getötet. Wenn Sie Ihre Reinitialisierung testen möchten, würde ich vorschlagen, dass Sie explizit einen Abbruch in den Tests auslösen, um Ihr Speicherzuordnungsverhalten zu testen. Auch die Xcode-Analyse-Funktion könnte Ihnen hier nützlich sein.

Wenn Sie ein Beispiel Ihres Testcodes posten könnten, wäre das eine große Hilfe und ich werde meine Antwort entsprechend bearbeiten.

0

Stellen Sie sicher, deinit ist es nicht empty.if seine leeren dann wird nie work.put was Sie brauchen, ob seine Arbeitsfreigeben und überprüfen oder nicht.

Mein Vorschlag

better to use dealloc method rather than using deinit.