2013-12-19 8 views
6

Also tauche ich in Komponententests mit XCTest, und bin in ein kleines Problem geraten.XCTAsert Syntaxfehler mit Array Kurzschriftausdruck und Methodenaufruf

Wenn ich eine XCTAssert Anweisung mit einem Kurzschrift-Array Erklärung und Methodenaufruf innerhalb schreibe, wird ein Syntaxfehler in Xcode ausgespuckt:

XCTAssert([self hasStrings:@[ @"foo", @"bar" ]]); 

Im Xcode Fehler kompiliert:

Expected identifier or '(' 

Jedoch , wenn ich weitere Klammern um den Ausdruck hinzufüge, wird es funktionieren:

Hat das etwas damit zu tun, dass einige meiner Syntax nicht in ein Makro übertragen werden? (Unter der Annahme, dass XCTAssert ist ein Makro)

Antwort

7

XCTAssert ist ein Makro mit einer variablen Argumentliste:

#define XCTAssert(expression, format...) \ 
    _XCTPrimitiveAssertTrue(expression, ## format) 

In Ihrer ersten Form interpretiert der Präprozessor

[self hasStrings:@[ @"foo", @"bar" ]] 

als zwei Makroargumente , getrennt durch ein Komma.

+0

Wow, große Antwort! Ich hatte ein ähnliches Problem mit der Methode [NSArray arrayWithObjects: ...] innerhalb des Aufrufs von XCTAssert (...). Danke, dass du das geschafft hast! –