GHAssertThrowsSpecific无法找到类型NSRangeException

时间:2011-07-18 18:23:50

标签: objective-c unit-testing xcode4 gh-unit

我正在使用Xcode 4和GHUnit首次编写一些单元测试。所有的建议似乎建议使用GHUnit而不是OCUnit。

我有一个名为“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 个答案:

答案 0 :(得分:1)

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

NSRangeException确实只是一个指向字符串的指针,该字符串包含“NSRangeException”。

我应该使用GHAssertThrowsSpecificNamed而不是使用GHAssertThrowsSpecific,它使用命名异常的字符串的附加参数,如下所示:

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

这很有效。