2011-07-18 56 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); 

这工作。