2013-12-19 40 views
6

所以我正在用XCTest進行單元測試,並遇到了一些小問題。XCTAssert語法錯誤,數組縮寫表達式和方法調用

當我寫裏面的簡寫數組的聲明和方法調用的XCTAssert語句,語法錯誤是在Xcode吐出來:

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

在Xcode編譯錯誤:

Expected identifier or '(' 

然而,如果我在表達式中添加更多的括號,它將起作用:

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

這是否與我的某些語法不允許傳遞給宏有關? (假設XCTAssert是一個宏)

回答

7

XCTAssert是具有可變參數列表宏:

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

在第一個形式中,該預處理器解釋

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

2個宏參數,用逗號分隔。

+0

哇,很好的回答!我在XCTAssert(...)調用中使用[NSArray arrayWithObjects:...]方法有類似的問題。謝謝你清除! –

相關問題