Was ist der Zweck der SetUp-Methode von XCTestCase?
Pro der Kommentar in der Standard-Vorlage für XCTestCase
bezüglich setUp
:
Put setup code here; it will be run once, before the first test case.
Jedoch in XCTestCase.h
der Kommentar oben setUp
Staaten unterschiedlich:
Setup method called before the invocation of each test method in the class.
Bestätigen das tatsächliche Verhalten, ich habe ein NSLog
innerhalbsetUp
zu zählen, wie viele Male hieß es:
static int count = 0;
- (void)setUp
{
[super setUp];
count++;
NSLog(@"Call Count = %d", count);
}
Dies führte in der setUp
- Methode aufgerufen wird, vor jeder test-Methode (Bestätigung der Kommentar auf XCTestCase.h
).
Wollte ich nutzen setUp
Methode zum erstellen von test - /mock-Objekte einmal (z.B. Einrichtung eines Core Data test stack). Die Erstellung dieser wieder und wieder sein würde-Prozessor-intensive und potentiell sehr langsam.
So,
1) Was ist setUp
eigentlich verwendet werden soll? Sicherlich Entwickler nicht, indem Sie Objekte in Sie über und über?
2) Wie kann ich diese Objekte nur einmal innerhalb einer XCTestCase
?
InformationsquelleAutor der Frage JRG-Developer | 2014-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Punkte zur Diskussion hier: das Verhalten des
setUp
Methoden und Allgemeinen besten Test-Verfahren.Gibt es eigentlich zwei
setUp
Methoden:Die Methode der Klasse (
+ (void)setUp
) ist nur einmal ausgeführt während der gesamten Prüfung laufen.Die Instanz-Methode (
- (void)setUp
) ist die einzige in der Standard-Vorlage; Sie laufen vor jedem einzelnen test. Hoffentlich, in eine hypothetische zukünftige version von Xcode, dieser Kommentar wird so geändert wurden, dass//Put setup code here. This method is called before the invocation of each test method in the class.
WINK WINKAlso durch diese zwei Methoden, die beide von den Verhaltensweisen, die Sie beschrieben sind, möglich.
Bezug auf Ihren Kommentar:
Meine Antwort wäre, "ja, Sie sind in der Regel". Ein beliebtes Akronym für "gute" unit-tests ist ZUNÄCHST:
Isoliert ist der Schlüssel zu dieser Diskussion: tests sollten nicht darauf verlassen, dass alle früheren Stand hinter sich gelassen, die von anderen tests. Idealerweise sollte man abreißen und neu erstellen Ihre in-memory-Core-Data-stack für jeden test, so dass Sie wissen, dass Sie ausgehend von einer sauberen Weste. Ein gutes Beispiel ist in dieser Beitrag von Graham Lee. Sie möchten ein in-memory-stack, weil a) Sie können einfach werfen Sie es Weg, und b) sollte es sehr schnell sein, da Sie nur im Speicher und nicht auf Ihre Festplatte.
Wenn Sie feststellen, dass Ihre tests laufen langsam als ein Ergebnis dieser (nicht optimieren, vorzeitig), dann denke ich, dass ein vernünftiger Nächster Schritt wäre es, erstellen Sie die Stapel in Ihre
+ (void)setUp
Methode, aber die Erstellung eines völlig neuen Kontext zu jeder Zeit in Ihrem- (void)setUp
Methode.InformationsquelleAutor der Antwort James Frost
Kam ich hier mit fast dem gleichen problem: wie führen Sie die
setUp
nur einmal in Swift. Hier ist die Lösung:Momentan bin ich noch auf der Suche nach einer Lösung für einen asynchrone
setUp
!InformationsquelleAutor der Antwort Zeb