swift - Komponententest Das CoreData (+ MagicalRecord) -Modell löst EXC_BAD_ACCESS aus

9

Ich muss einige meiner Methoden, die einen Verweis auf CoreData-Modelle enthalten, in einen Unit-Test ( XCTest ) einbinden.

Die folgende Zeile wird korrekt ausgeführt:

%Vor%

, während die folgende Zeile ein EXC_BAD_ACCESS auslöst:

%Vor%

Kein Hinweis auf diesen Fehler mit meinem Hauptziel. Die Konfiguration lautet: Modellobjekte in beiden Zielen, Klasse mit dem Präfix @objc(MyModel) , kein Namespace in Klassenmodellen in meinem xcdatamodel

Irgendeine Idee, was hier vor sich geht?

    
Yaman 15.05.2015, 12:21
quelle

2 Antworten

3

Richtig, also bin ich endlich auf den Grund gegangen und es ist nicht schön. Es gibt tatsächlich ein Radar für dieses Problem, da es anscheinend ein Fehler ist, bei dem der Swift-Compiler kein ManagedObject-Casting in Testzielen erkennt. Fügen Sie also Ihre Stimme dem Geräusch hinzu

Beginnen Sie mit einer Entität, die wie folgt definiert ist:

%Vor%

Ich habe eine einfache Testklasse geschrieben, in der ich ein MO auf drei verschiedene Arten erstelle:

Die ersten beiden sind fehlgeschlagen:

%Vor%

Und dann ein Erfolg

%Vor%

Dies bedeutet, dass Sie jetzt zwei Möglichkeiten haben. Schreiben Sie Ihre Tests in Objective-C; oder erstellen Sie eine Hilfsmethode, um Testobjekte mit den oben gezeigten Mitteln in einen Kontext einzufügen.

Es gibt einen schönen Beitrag über dieses Verhalten hier

Am Ende habe ich eine NSManagedObjectContext-Erweiterung verwendet, die in Swift-Tests explizit verwendet wird:

%Vor%

Und es könnte so verwendet werden:

%Vor%

Lesen Sie mehr über diese Art von Ansatz hier

    
Daniel Galasko 27.05.2015, 18:09
quelle
0

Es gibt zwei Möglichkeiten, Ihre Swift-Anwendungsklassen für das Testziel verfügbar zu machen:

  1. Machen Sie Ihre Anwendungsklassen öffentlich - dies beinhaltet alle Variablen, Konstanten und Funktionen, die Sie testen möchten

  2. Fügen Sie Ihre Anwendung Swift-Datei zu Ihrem Testziel hinzu. Das ist ziemlich einfach zu machen.

Tushar 27.05.2015 07:03
quelle