2012-08-16 71 views
1

我試圖做的事:爲什麼我不能直接將int或bool傳遞給OCMock的「andReturnValue」參數?

[[[mockQuestion stub] andReturnValue:YES] shouldNegate]; 
[[[mockQuestion stub] andReturnValue:123] randomNumberWithLimit]; 

但是,這給了我這個警告/錯誤「不兼容的整數指針轉換髮送‘BOOL’(又名‘符號字符’)類型爲‘NSValue *’的參數」

我能想出要解決的唯一辦法就是要做到:

BOOL boolValue = YES; 
int num = 123; 

[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE(boolValue)] shouldNegate]; 
[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE(num)] randomNumberWithLimit]; 

但是,這使我的測試代碼顯得如此過於冗長。是有辦法做這一切在線,而不必設置變量?

回答

3

您可以使用看起來像(type){value}的文字樣式。這通常用於創建結構文字,但也適用於基本數據類型。這裏重要的一點是,這種類型的文字創建了一個可以解決的臨時問題。這意味着您可以編寫代碼,如

[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})] shouldNegate]; 
[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE((int){123})] randomNumberWithLimit]; 
+0

謝謝,這應該在我的測試中刪除相當數量的樣板文件! – 2012-08-20 19:54:55

+0

也不知道這個語法。這是新的嗎?我會相應地更新OCMock文檔。 – 2012-08-23 15:31:01

+0

@ErikDoernenburg:它們被稱爲「複合文字」,它們在C99中引入。所以他們已經存在了十多年,雖然由於某種原因他們並不是很出名。 – 2012-08-23 19:17:59

0

該參數應該是一個對象指針。在這種情況下,它應該指向NSValue類的一個對象。

相關問題