2011-07-18 84 views
2

我正在使用Xcode 4和GHUnit首次編寫一些單元測試。所有的建議似乎建議與GHUnit,而不是OCUnit。GHAssertThrowsSpecific找不到類型NSRangeException

我有一個名爲'myList'的自定義集合對象,並傳遞一條消息以獲取選擇index:-1。因此它正確地拋出一個NSRangeException(來自潛在的可變數組)。

我很努力用GHAssertThrowsSpecific斷言來解決這個問題。

下面這行代碼不會編譯說'未知類型名'NSRangeException'。

GHAssertThrowsSpecific(s = [myList selectionAtIndex:-1], 
      NSRangeException, @"Should have thrown an NSRangeException", nil); 

我是#importing "Foundation/NSException.h"其中NSRangeException似乎是定義的。如果我將其更改爲:

GHAssertThrowsSpecific(s = [myList selectionAtIndex:-1], 
      NSException, @"Should have thrown an NSException", nil); 

然後編譯良好,斷言起作用,所以它與NSRangeException有關。

如果我看看頭文件,NSRangeException似乎被定義爲NSString * const,在這種情況下,我該如何設法聲明我期望捕獲它。

我顯然很愚蠢,因爲我看不到我做錯了什麼。

回答

1

好的,所以我找到了答案。

NSRangeException實際上只是一個指向包含「NSRangeException」的字符串的指針。除了使用GHAssertThrowsSpecific的

,我本來應該使用GHAssertThrowsSpecificNamed,這需要命名異常的字符串的附加參數,如下所示:

GHAssertThrowsSpecificNamed(s = [myList selectionAtIndex:-1], 
    NSException, NSRangeException, @"Should have thrown an NSRangeException", nil); 

這工作。